- PVSM.RU - https://www.pvsm.ru -
Всем привет! Похоже, жители «Хабрахабра» всё ещё скептически относится к красноречивому (eloquent) php-фреймворку Laravel [1] от Taylor Otwell [2]. К сожалению, никто так и не осветил вчерашний выход новой 5-й версии. Постараюсь восполнить этот недостаток. Я не буду рассказывать о том, что это за очередной фреймворк и какие велосипеды стоят в его гараже, а освещу лишь те моменты, которых коснулись изменения. В основном статья будет вольным переводом release notes [3] с официального сайта. Часть понятий и терминов я не стал переводить, чтобы не растерялся смысл.
Помню когда только узнал о Laravel, скинул ссылку на офф. сайт коллеге, чтобы разделить свой восторг, однако спустя пару минут услышал категоричное «слишком много розового». Отныне подобные высказывания не должны иметь место быть. Новый дизайн [4] избавили от большой розовой шапки вверху главной страницы, оставив лишь несколько патриотичных (в контексте фреймворка) заголовков, призывающих к использованию именного данного решения.
Страница документация сохранила прежний вид, однако стала более логична в плане разделения версий. Раньше версия разработки была помечена как dev, сейчас же она называется master, что соответствует названию ветки на github [5].
Удалена папка app/models. Теперь весь код, касающийся именно вашего приложения хранится в папке app в пространстве имен App (привет psr-4!). Стандартное пространство имен может быть изменено Artisan командой app:name.
Controllers, middleware, и requests (новый тип классов в Laravel 5.0) сгруппированы в папке app/Http, т.к. эти классы относятся к HTTP слою приложения. Вместо единого файла с фильтрами каждый middleware (альтернатива фильтрам, что-то между запросом и переходом к контроллеру) обзавелся собственным классом.
Классы в папке app/Providers пришли на замену файлам в папке app/start. Эти service providers обеспечивают подгрузку классов в приложение, такие как обработка ошибок, логирование, загрузка роутов и пр. Там же, вы можете создавать свои service providers.
Файлы мультиязычности и представлений перемещены в папку resources.
Все основные компоненты Laravel реализуют интерфейсы, которые находятся в illuminate/contracts репозитории. У этого репозитория нет внешних зависимостей. Имея удобный, централизованный набор интерфейсов, вы можете использовать их для decoupling, а внедрение зависимостей послужит отличной альтернативой фасадам.
Документация [6].
Если ваше приложение состоит исключительно из route-controllers, вы можете использовать новую Artisan команду route:cache чтобы значительно ускорить загрузку схемы роутов. Данную возможность имеет смысл использовать на приложениях со 100 и более маршрутами для увеличения скорости загрузки этой части приложения.
На смену Laravel 4 фильтрам, в Laravel 5 пришли HTTP middleware, а уже знакомые стандартные фильтры авторизации и CSRF защиты переписаны на новый лад. Middleware предоставляют единый, постоянный интерфейс для замены любых видов фильтров, позволяя удобно исследовать и отклонять запрос до того, как он будет отдан на обработку контроллеру.
Документация [7].
В дополнении к существующему constructor injection, теперь вы можете указывать зависимости (ориг.: type-hint dependencies) в методах контроллера. IoC контейнер автоматически внедрит зависимости, даже, если маршрут содержит иные параметры:
public function createPost(Request $request, PostRepository $posts)
{
//
}
Регистрация, авторизация пользователя, а так же восстановления пароля теперь доступны «из коробки», а соответствующие им представления расположенные в resources/views/auth. В дополнении к этому миграция таблицы «users» поставляется вместе с фреймворком. Включение этих простых ресурсов позволяет быстро разрабатывать прототипы, не тратя время на организацию авторизации. Интерфейсы авторизации доступны по маршрутам auth/login и auth/register. Сервис AppServicesAuthRegistrar отвечает за валидацию и создание пользователей.
Теперь события (ориг.: Events) можно определять в виде классов, вместо строк, например:
class PodcastWasPurchased {
public $podcast;
public function __construct(Podcast $podcast)
{
$this->podcast = $podcast;
}
}
Событие может быть отослано (ориг.: dispatched), как и раньше:
Event::fire(new PodcastWasPurchased($podcast));
Обработчик события получит объект события, вместо списка данных:
class ReportPodcastPurchase {
public function handle(PodcastWasPurchased $event)
{
//
}
}
Документация [8].
В дополнении к очередям (ориг.: queue job format), поддерживаемых в Laravel 4, Laravel 5 позволяет представить очередь в виде простых command objects. Эти commands находятся в папке app/Commands. Пример:
class PurchasePodcast extends Command implements SelfHandling, ShouldBeQueued {
use SerializesModels;
protected $user, $podcast;
/**
* Create a new command instance.
*
* @return void
*/
public function __construct(User $user, Podcast $podcast)
{
$this->user = $user;
$this->podcast = $podcast;
}
/**
* Execute the command.
*
* @return void
*/
public function handle()
{
// Handle the logic to purchase the podcast...
event(new PodcastWasPurchased($this->user, $this->podcast));
}
}
Базовый контроллер Laravel использует новый DispatchesCommands признак (ориг.: trait), позволяющий довольно просто отправлять commands на выполнение:
$this->dispatch(new PurchasePodcastCommand($user, $podcast));
Commands так же можно использовать для задач, которые выполняются синхронно (не выстраиваются в очередь). По факту, использование commands это отличная возможность инкапсулировать сложные задачи, решаемые вашим приложением.
Документация [9].
Драйвер очередей баз данных теперь доступен из коробки. Предоставляет простой локальный драйвер, не требующий дополнительных зависимостей за пределами БД.
Раньше, чтобы запланировать выполнение какой-то консольной команды, разработчикам приходилось «вешать» каждую из них на cron, что доставляло немало головной боли. Из-за того, что данный процесс не происходит в экосистеме приложения, требовалось подключаться к серверу по SSH (либо через веб-интерфейс) и контроллировать процесс вручную. Теперь все стало намного проще. Планировщик задач в Laravel позволяет быстро и просто добавить задачи на выполнение по расписанию внутри самого приложения и теперь это требует всего одну cron задачу!
Выглядит примерно так:
$schedule->command('artisan:command')->dailyAt('15:00');
Документация [10].
Команда php artisan tinker теперь использует Psysh от Justin Hileman (более надежный REPL для PHP). Если вам нравилось использовать Boris в Laravel 4, то вы непременно полюбите и Psysh. Он даже работает под Windows! Чтобы начать, пропишите в терминале:
php artisan tinker
Вместо сбивающего с толку разнообразия вложенных папок с конфигурациями окружений, Laravel 5 использует DotEnv [11] от Vance Lucas. Эта библиотека предоставляет супер простой способ управления настроек для конкретной среды выполнения и позволяет определять окружение на лету.
Документация [12].
Laravel Elixir от Jeffrey Way, предоставляет простой и выразительный интерфейс для сборки ресурсов (ориг.: assets). Если вы боялись начать изучать Grunt или Gulp — теперь это будет легко. Elixir это прослойка для Gulp для сборки Less, Sass, и CoffeeScript, а так же для конкатенации файлов и кеширования на основании версий. Он даже может запускать тесты!
Документация [13].
Laravel Socialite — необязательный пакет, совместимый с Laravel 5.0+, позволяющий абсолютно безболезненно реализовать авторизацию по протоколу OAuth. На текущий момент поддерживает Facebook, Twitter, Google, and GitHub. Как это выглядит:
public function redirectForAuth()
{
return Socialize::with('twitter')->redirect();
}
public function getUserFromProvider()
{
$user = Socialize::with('twitter')->user();
}
Документация [14].
Теперь Laravel поставляется с мощнейшей файловой системой Flysystem [15], являющейся уровнем абстракции, предоставляющая безболезненную интеграцию с локальной ФС, Amazon S3, и облачным хранилищем Rackspace — все это в одном едином и элегантном API! Хранить файлы на Amazon S3 теперь так просто:
Storage::put('file.txt', 'contents');
Документация [16].
Laravel 5.0 представляет «запросы формы» (ориг. form requests), которые расширяются IlluminateFoundationHttpFormRequest классом. Эти объекты запроса могут быть внедрены в методы контроллера для валидации пользовательского ввода. Пример простого FormRequest:
<?php namespace AppHttpRequests;
class RegisterRequest extends FormRequest {
public function rules()
{
return [
'email' => 'required|email|unique:users',
'password' => 'required|confirmed|min:8',
];
}
public function authorize()
{
return true;
}
}
После того, как класс определен мы можем «намекнуть» (ориг.: type-hint) о нем в методе контроллера:
public function register(RegisterRequest $request)
{
var_dump($request->input());
}
Когда Laravel IoC container определит, что внедряемый экземпляр класса FormRequest, запрос автоматически будет проверен (ориг.: validated). Это означает, что если вызван метод (ориг.: action) контроллера вы можете быть уверены, в том, что пользовательский ввод был успешно проверен в соответствии с определенными в FormRequest правилами. Даже больше, если запрос невалиден, автоматически сработает редирект (который вы можете настроить) куда будет передано быстрое сообщение (ориг.: flash message) в сессию, либо JSON строкой. Валидация форм еще никогда не была такой простой!
Документация [17].
Базовый контроллер в Laravel 5 теперь может использовать ValidatesRequests признак (ориг.: trait). Этот признак предоставляет простой метод валидации поступающего запроса. Если FormRequests слишком громоздкий для вашего приложения, взгляните на это:
public function createPost(Request $request)
{
$this->validate($request, [
'title' => 'required|max:255',
'body' => 'required',
]);
}
Если валидация не прошла, будет брошено исключение и отправлены соответствующие HTTP заголовки обратно в браузер. Так же, ошибки валидации «вспыхнут» (ориг.: flashed) в сессию. Если запрос был послан AJAX-ом, Laravel автоматически отконвертирует эти ошибки в JSON строку.
Документация [18].
По случаю обновления структуры фреймворка были добавлены новые Artisan generator commands. Для более детальной информации пропишите в терминале
php artisan list
Теперь можно кешировать все конфигурационные файлы, объединив их в один файл командой:
php artisan config:cache
Популярный хелпер dd, который «вываливает» отладочную информацию, обновлен и теперь использует невероятный Symfony VarDumper, который предоставляет цветной вывод и даже сворачиваниеразворачивание массивов. Просто попробуйте это:
dd([1, 2, 3]);
По случаю релиза 5ой версии Jeffrey Way [19] открыл бесплатный доступ [20] к видео урокам, в которых доступно объясняет новые возможности. До какого момента — неизвестно. Видео можно посмотреть онлайн, однако кнопка download ведет в личный кабинет, поэтому, если хотите посмотреть позже, то инспектируйте видео плеер в поисках прямой ссылки.
Так же есть серия статей [21] от Matt Stauffer [22], если любите почитать.
Laravel отличный, свежий фреймворк. Он аккумулирует в себе лучшие практики ООП и существующие компоненты, это конструктор, проектировать на котором легко и приятно.
Автор: likerRr
Источник [23]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/framework/81890
Ссылки в тексте:
[1] Laravel: http://laravel
[2] Taylor Otwell: https://twitter.com/taylorotwell
[3] release notes: http://laravel.com/docs/5.0/releases#laravel-5.0
[4] Новый дизайн: http://laravel.com
[5] github: https://github.com/laravel/laravel
[6] Документация: http://laravel.com/docs/5.0/contracts
[7] Документация: http://laravel.com/docs/5.0/middleware
[8] Документация: http://laravel.com/docs/5.0/events
[9] Документация: http://laravel.com/docs/5.0/bus
[10] Документация: http://laravel.com/docs/5.0/artisan#scheduling-artisan-commands
[11] DotEnv: https://github.com/vlucas/phpdotenv
[12] Документация: http://laravel.com/docs/5.0/configuration#environment-configuration
[13] Документация: http://laravel.com/docs/5.0/elixir
[14] Документация: http://laravel.com/docs/5.0/authentication#social-authentication
[15] Flysystem: https://github.com/thephpleague/flysystem
[16] Документация: http://laravel.com/docs/5.0/filesystem
[17] Документация: http://laravel.com/docs/5.0/validation#form-request-validation
[18] Документация: http://laravel.com/docs/5.0/validation#controller-validation
[19] Jeffrey Way: https://twitter.com/jeffrey_way
[20] бесплатный доступ: https://laracasts.com/series/laravel-5-fundamentals
[21] серия статей: http://mattstauffer.co/blog/laravel-5.0-form-requests
[22] Matt Stauffer: https://twitter.com/stauffermatt
[23] Источник: http://habrahabr.ru/post/249911/
Нажмите здесь для печати.