Обновленный дизайна официального сайта
Помню когда только узнал о Laravel, скинул ссылку на офф. сайт коллеге, чтобы разделить свой восторг, однако спустя пару минут услышал категоричное «слишком много розового». Отныне подобные высказывания не должны иметь место быть. Новый дизайн избавили от большой розовой шапки вверху главной страницы, оставив лишь несколько патриотичных (в контексте фреймворка) заголовков, призывающих к использованию именного данного решения.
Страница документация сохранила прежний вид, однако стала более логична в плане разделения версий. Раньше версия разработки была помечена как dev, сейчас же она называется master, что соответствует названию ветки на github.
Файловая структура
Удалена папка 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.
Contracts
Все основные компоненты Laravel реализуют интерфейсы, которые находятся в illuminate/contracts репозитории. У этого репозитория нет внешних зависимостей. Имея удобный, централизованный набор интерфейсов, вы можете использовать их для decoupling, а внедрение зависимостей послужит отличной альтернативой фасадам.
Route Cache
Если ваше приложение состоит исключительно из route-controllers, вы можете использовать новую Artisan команду route:cache чтобы значительно ускорить загрузку схемы роутов. Данную возможность имеет смысл использовать на приложениях со 100 и более маршрутами для увеличения скорости загрузки этой части приложения.
Route Middleware
На смену Laravel 4 фильтрам, в Laravel 5 пришли HTTP middleware, а уже знакомые стандартные фильтры авторизации и CSRF защиты переписаны на новый лад. Middleware предоставляют единый, постоянный интерфейс для замены любых видов фильтров, позволяя удобно исследовать и отклонять запрос до того, как он будет отдан на обработку контроллеру.
Controller Method Injection
В дополнении к существующему constructor injection, теперь вы можете указывать зависимости (ориг.: type-hint dependencies) в методах контроллера. IoC контейнер автоматически внедрит зависимости, даже, если маршрут содержит иные параметры:
public function createPost(Request $request, PostRepository $posts)
{
//
}
Authentication Scaffolding
Регистрация, авторизация пользователя, а так же восстановления пароля теперь доступны «из коробки», а соответствующие им представления расположенные в resources/views/auth. В дополнении к этому миграция таблицы «users» поставляется вместе с фреймворком. Включение этих простых ресурсов позволяет быстро разрабатывать прототипы, не тратя время на организацию авторизации. Интерфейсы авторизации доступны по маршрутам auth/login и auth/register. Сервис App\Services\Auth\Registrar отвечает за валидацию и создание пользователей.
Event Objects
Теперь события (ориг.: 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)
{
//
}
}
Commands / Queueing
В дополнении к очередям (ориг.: 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 это отличная возможность инкапсулировать сложные задачи, решаемые вашим приложением.
Database Queue
Драйвер очередей баз данных теперь доступен из коробки. Предоставляет простой локальный драйвер, не требующий дополнительных зависимостей за пределами БД.
Laravel Scheduler
Раньше, чтобы запланировать выполнение какой-то консольной команды, разработчикам приходилось «вешать» каждую из них на cron, что доставляло немало головной боли. Из-за того, что данный процесс не происходит в экосистеме приложения, требовалось подключаться к серверу по SSH (либо через веб-интерфейс) и контроллировать процесс вручную. Теперь все стало намного проще. Планировщик задач в Laravel позволяет быстро и просто добавить задачи на выполнение по расписанию внутри самого приложения и теперь это требует всего одну cron задачу!
Выглядит примерно так:
$schedule->command('artisan:command')->dailyAt('15:00');
Tinker / Psysh
Команда php artisan tinker теперь использует Psysh от Justin Hileman (более надежный REPL для PHP). Если вам нравилось использовать Boris в Laravel 4, то вы непременно полюбите и Psysh. Он даже работает под Windows! Чтобы начать, пропишите в терминале:
php artisan tinker
DotEnv
Вместо сбивающего с толку разнообразия вложенных папок с конфигурациями окружений, Laravel 5 использует DotEnv от Vance Lucas. Эта библиотека предоставляет супер простой способ управления настроек для конкретной среды выполнения и позволяет определять окружение на лету.
Laravel Elixir
Laravel Elixir от Jeffrey Way, предоставляет простой и выразительный интерфейс для сборки ресурсов (ориг.: assets). Если вы боялись начать изучать Grunt или Gulp — теперь это будет легко. Elixir это прослойка для Gulp для сборки Less, Sass, и CoffeeScript, а так же для конкатенации файлов и кеширования на основании версий. Он даже может запускать тесты!
Laravel Socialite
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();
}
Flysystem Integration
Теперь Laravel поставляется с мощнейшей файловой системой Flysystem, являющейся уровнем абстракции, предоставляющая безболезненную интеграцию с локальной ФС, Amazon S3, и облачным хранилищем Rackspace — все это в одном едином и элегантном API! Хранить файлы на Amazon S3 теперь так просто:
Storage::put('file.txt', 'contents');
Form Requests
Laravel 5.0 представляет «запросы формы» (ориг. form requests), которые расширяются Illuminate\Foundation\Http\FormRequest классом. Эти объекты запроса могут быть внедрены в методы контроллера для валидации пользовательского ввода. Пример простого FormRequest:
Комментариев нет:
Отправить комментарий