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


Что это значит? Если вы до этого занимались только Frontend-разработкой, я бы сравнил Laravel с Angular: буквально с одной строчки, которая генерирует вам новый проект, вы получаете практически все в коробке (конечно без фронтенд части проекта, но еще 2-3 команды и она окажется на месте). Все что касается самой PHP-разработки, то в Laravel на месте практически все, что вы можете захотеть для построения надежного бэкэнд-приложения: PHPUnit — фреймворк, предназначенный для тестирования, Artisan — интерфейс командной строки для миграции баз данных, создания моделей и остальной настройки приложения, встроенный сервер Homestead, в котором можно создавать виртуальное окружение, а также работу с роутингом, обработку миддлваров, а также комфортное связывание view с Blade-шаблонами.
Постараемся разобрать все сложные понятия по порядку. Напоминаю: эта статья только теоретическое введение для новичков. Практические примеры будут в следующих частях.
Философия 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 — система объектно-реляционного отображения, которая связывает базы данных с концепциями объектно-ориентированного программирования.
Звучит на первый взгляд страшно, однако это напрямую связано с миграцией баз данных: на каждую таблицу создается свой класс — модель, который используется только для работы с этой таблицей. Это позволяет не разводить лишней работы в самой базе данных, а взаимодействовать с ней опять же напрямую из проекта. В итоге это получается и удобней, и надежней. Конеч��о, на освоение команд и особенностей генерации моделей уйдет некоторое время, но на создание большого проекта с огромным количеством таблиц его уйдет куда больше.
Blabe — шаблоны дают возможность удобно связывать ваши представления вида. Вот как бы это выглядело на нативном PHP:
Согласитесь, выглядит куда аккуратнее! Конечно, на самом деле за этим стоит код контроллера и экспорт из остальных Blade-шаблонов, однако на большом проекте это будет только удобнее.

Artisan — это интерфейс командной строки, который поставляется вместе с Laravel. Он позволяет генерировать модели, контроллеры, новые тесты, уведомления — прямо из командной строки. Это куда удобнее, чем каждый раз копировать откуда-то шаблон класса или даже писать его ручками.
Если вы хотите разрабатывать свои проекты через TDD/BDD ( разработка через тестирование/разработка через поведение) то здесь в комплекте есть PHPUnit( поддерживаются такие тесты как Browser/Unit/Feature), а также пакет для генерации ненастоящего контента Faker (полезно, например, при тестировани�� работы БД, потому что не приходится самостоятельно наполнять контентом, который обычно добавляет туда сам пользователь).
Хотите, что бы в вашем приложении быстро появилась аутентификация через соцсети? Без проблем, Laravel Socialite cпешит на помощь. Хотите настроить кэширование? Без проблем, прямо из коробки. У вас много проектов, которые размещены на VPS различных сервисов? Laravel Forge на месте. Нужны WebSockets, например для чата? Без проблем. И так можно продолжать очень долго.
Сейчас Laravel, вне сомнения, занимает положение самого главного PHP-фреймворка. Сейчас, по данным Github, репозиториев с Laravel около 195к против 35к у Yii и 43к у Symfony. Пускай это не самое честное сравнение, но почему тогда вам не попробовать 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?
