Laravel: объясняем основные понятия. Часть первая: «Теория»

    Друзья, у нас отличные новости. В августе мы в OTUS запустили новый курс — «Framework Laravel», но желающих обучаться было столько, что не все успели попасть в группу. Новый поток по курсу стартует уже в конце октября! Ждем всех и традиционно, в преддверии старта курса, делимся полезным материалом.



    В данной статье мы познакомимся с теоретическими основами Laravel — c самим фреймворком, c его историей, и с основными понятиями и концепциями, которые в нем используются. Данная статья предназначена для новичков, которые уже освоили основы PHP, попробовали написать свой первый сайт, например, с небольшой системой CMS, однако еще не пробовали работать с PHP-фреймворками, и не поняли основные плюсы, которые они предлагают.
    Итак, Laravel — это относительно новый веб фреймворк (первый выпуск произошел в 2011 году). Laravel взял лучшее из другого бэкэнд-фреймворка, такого как Rails, однако сейчас уже Laravel сильно обогнал его по распространенности. На момент написания данной статьи последняя версия — 6.



    Не фреймворк, а целая экосистема


    Что это значит? Если вы до этого занимались только Frontend-разработкой, я бы сравнил Laravel с Angular: буквально с одной строчки, которая генерирует вам новый проект, вы получаете практически все в коробке (конечно без фронтенд части проекта, но еще 2-3 команды и она окажется на месте). Все что касается самой PHP-разработки, то в Laravel на месте практически все, что вы можете захотеть для построения надежного бэкэнд-приложения: PHPUnit — фреймворк, предназначенный для тестирования, Artisan — интерфейс командной строки для миграции баз данных, создания моделей и остальной настройки приложения, встроенный сервер Homestead, в котором можно создавать виртуальное окружение, а также работу с роутингом, обработку миддлваров, а также комфортное связывание view с Blade-шаблонами.

    Постараемся разобрать все сложные понятия по порядку. Напоминаю: эта статья только теоретическое введение для новичков. Практические примеры будут в следующих частях.

    Homestead

    Философия Laravel состоит в том, чтобы дать вам из коробки максимальное количество удобных инструментов, причем желательно однозначно удобных, надежных и простых в эксплуатации. Именно поэтому в документации одним из первых упоминается Homestead.

    Laravel Homestead — это предустановленная Vagrant — «коробка». Что это такое? Читатель скорее всего пользовался сборками XAMPP, Abyss Web Server, или скачивал все необходимые для работы сервера штуки (Apache, PHP, PHPMyAdmin, MySQL и многое другое) самостоятельно. Полный список установленного внутри Homestead вы можете найти здесь. Зачем это сделано именно так? Homestead создает некое «виртуальное окружение», которое выполняется в той же среде, что и на сервере, и с теми же программами. Homestead быстро и легко пересоздает свои «виртуальные» коробки, и вам не придется долго мучаться, если вы нечаянно что-то сломали.

    Однако на Homestead Laravel не заканчивается. Если вы работает под Mac OS, вам нужно попробовать минималистичный Valet, который не имеет такого количества функций из коробки, но куда проще в установке. А так же ещё огромное количество дополнительных пакетов — это же целая экосистема!



    Миграция баз данных


    Словосочетание «Миграция баз данных» звучит скорее всего несколько пугающе для новичка. Я надеюсь, читатель знает, для чего нужна база данных (в принципе, очевидно что для хранения информации) и даже написал в своей жизни что-то большее чем «SELECT * FROM Customers» в SQL командах. Этого должно хватить.

    Итак, миграция — это нечто вроде системы контроля для переноса ваших таблиц в БЗ c помощью конструктора таблиц. Миграция позволит вам избежать ошибок и конфликтов во время конструирования таблиц в базе данных для большого проекта вместе с участниками другой команды. Кроме того, это позволит взаимодействовать с базой данных не с помощью таких инструментов, как MySQL WorkBench или PhpMyAdmin, а напрямую из кода, в зависимости от потребностей вашего проекта в таблицах данных. Добавление и удаление таблиц записывается в истории миграций, и теперь хотя бы у тимлидов станет на одну головную боль меньше.





    ORM


    ORM — система объектно-реляционного отображения, которая связывает базы данных с концепциями объектно-ориентированного программирования.

    Звучит на первый взгляд страшно, однако это напрямую связано с миграцией баз данных: на каждую таблицу создается свой класс — модель, который используется только для работы с этой таблицей. Это позволяет не разводить лишней работы в самой базе данных, а взаимодействовать с ней опять же напрямую из проекта. В итоге это получается и удобней, и надежней. Конечно, на освоение команд и особенностей генерации моделей уйдет некоторое время, но на создание большого проекта с огромным количеством таблиц его уйдет куда больше.

    Blade — шаблоны: удобное представление вида


    Blabe — шаблоны дают возможность удобно связывать ваши представления вида. Вот как бы это выглядело на нативном PHP:

    <?php
    include($_SERVER['DOCUMENT_ROOT']."/shop/includes/header.inc.php");
    ?>
    <div class="catalog">
        <div class="catalog-filters"> </div>
        <div class="catalog-products"> </div>
        <div class="catalog-pagination"> </div>
    </div>
    <?php
    include($_SERVER['DOCUMENT_ROOT']."/shop/includes/footer.inc.php");
    ?> 

    <html>
      <head>
      </head>
      <body>
          @extends(‘header')
    	  @extends(‘catalog')
        	  @extends(‘footer’)
      </body>
    </html>
    

    Согласитесь, выглядит куда аккуратнее! Конечно, на самом деле за этим стоит код контроллера и экспорт из остальных Blade-шаблонов, однако на большом проекте это будет только удобнее.



    Добрый помощник Artisan


    Artisan — это интерфейс командной строки, который поставляется вместе с Laravel. Он позволяет генерировать модели, контроллеры, новые тесты, уведомления — прямо из командной строки. Это куда удобнее, чем каждый раз копировать откуда-то шаблон класса или даже писать его ручками.

    Тестирование приложения


    Если вы хотите разрабатывать свои проекты через TDD/BDD ( разработка через тестирование/разработка через поведение) то здесь в комплекте есть PHPUnit( поддерживаются такие тесты как Browser/Unit/Feature), а также пакет для генерации ненастоящего контента Faker (полезно, например, при тестировании работы БД, потому что не приходится самостоятельно наполнять контентом, который обычно добавляет туда сам пользователь).

    Множество приятных мелочей


    Хотите, что бы в вашем приложении быстро появилась аутентификация через соцсети? Без проблем, Laravel Socialite cпешит на помощь. Хотите настроить кэширование? Без проблем, прямо из коробки. У вас много проектов, которые размещены на VPS различных сервисов? Laravel Forge на месте. Нужны WebSockets, например для чата? Без проблем. И так можно продолжать очень долго.

    Зачем мне учить этот Laravel?

    Сейчас Laravel, вне сомнения, занимает положение самого главного PHP-фреймворка. Сейчас, по данным Github, репозиториев с Laravel около 195к против 35к у Yii и 43к у Symfony. Пускай это не самое честное сравнение, но почему тогда вам не попробовать Laravel?
    OTUS. Онлайн-образование
    675.92
    Цифровые навыки от ведущих экспертов
    Share post

    Comments 8

      –1
      Автор, пожалуйста, потрудитесь над оформлением текста публикации. Отсутствующие дефисы, пробелы и слишком плотные абзацы — всё это наводит на неоднозначные мысли.
        0
        Действительно немного поплыла разметка текста. Поправлю, спасибо.
        0
        Автор, опечатки тоже доставляют
        Blade-шаблоны: удобное представление вида
        Blabe — шаблоны


        Мне, как олду, кто не юзает современные популярные фреймфорки, на самом деле интересно ознакомиться, но вот что меня напрягает в них больше всего — так это каждый тянет свой шаблонизатор. А я привык к теплому ламповому и быстрому Blitz extension
          0
          Laravel без проблем поддерживает несколько шаблонизаторов и даже одновременно. Не знаю есть ли готовый пакет для blitz, но прикручивается элементарно.
          Можете попробовать прикрутить, это отличный поинт почему стоит использовать современные фреймворки.

          Удивлён, что Blitz ещё используют, вроде даже изначально это был костыль для ускорения древнего шаблонизатора на регулярках, чтобы не переделывать шаблоны на новый.
            0
            Blitz это расширение, работает быстро. Учитывая, что его, насколько я помню, Алексей Рыбак разрабатывал его для Badoo, не удивлюсь, что он там до сих пор и работает. Кстати Хабр тоже его использовал.
              0
              Да, Фишер молодец. Но уже тогда дошли до идеи компилировать шаблоны в нативный пхп код, который работает очень быстро и в реальных кейсах был быстрее блитза, который проседал из-за специфики подготовки данных для шаблонизатора.
              В общем, после blitz проблем с Blade у вас точно не будет.
                0
                Что за специфика такая?
          +1
          Можно было еще отметить, что Laravel позволяет быстро создать окружение не только с помощью Homestead, но и с помощью Laragon. Тоже удобная программка, которая позволяет быстро разворачивать и разрабатывать небольшие Laravel-проекты

          Only users with full accounts can post comments. Log in, please.