Друзья, у нас отличные новости. В августе мы в 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?