Политика поддержки
Для LTS-версий, таких как Laravel 5.1, обеспечивается исправление ошибок в течение 2 лет и исправление ошибок безопасности в течение 3 лет. Такие версии имеют наибольший срок поддержки. Для обычных версий обеспечивается исправление ошибок в течение 6 месяцев и исправление ошибок безопасности в течение 1 года.
Laravel 5.3
В Laravel 5.3 продолжены улучшения, сделанные в Laravel 5.2, добавлена система уведомлений на основе драйверов, надёжная поддержка режима реального времени с помощью Laravel Echo, простая настройка серверов OAuth2 с помощью Laravel Passport, полнотекстовый поиск моделей с помощью Laravel Scout, поддержка Webpack в Laravel Elixir, «отправляемые по почте» объекты, явное разделение маршрутов web и api, консольные команды на основе замыканий, удобные вспомогательные функции для хранения загружаемых файлов, поддержка POPO и контроллеров одностороннего действия, улучшенная заготовка фронтенда по умолчанию, и многое другое.
Уведомления
На Laracasts есть бесплатный видео-урок по этой теме.
Уведомления Laravel предоставляют простой, выразительный API для отправки уведомлений по различным каналам доставки, таким как email, Slack, SMS и другим. Например, вы можете определить уведомление об оплате счёта и доставлять его по email и SMS. Затем вы можете отправить уведомление с помощью одного простого метода:
$user->notify(new InvoicePaid($invoice));
Для уведомлений уже создано огромное множество созданных сообществом драйверов, включая поддержку уведомлений для iOS и Android. Подробнее об уведомлениях читайте в полной документации.
WebSockets / Вещание событий
Вещание событий есть и в предыдущих версиях Laravel, но в Laravel 5.3 оно значительно улучшено добавлением аутентификации на уровне канала для частных каналов и каналов присутствия WebSocket :
/*
* Аутентификация подписки на канал...
*/
Broadcast::channel('oders.*', function ($user, $orderId) {
return $user->placedOrder($orderId);
});
Выпущен Laravel Echo — JavaScript-пакет, устанавливаемый через NPM. Он обеспечивает простой, прекрасный API для подписок на каналы и прослушивания ваших событий на стороне сервера в вашем JavaScript-приложении на стороне клиента. Echo включает поддержку Pusher и Socket.io:
Echo.channel('orders.' + orderId)
.listen('ShippingStatusUpdated', (e) => {
console.log(e.description);
});
В дополнение к подпискам на обычные каналы Laravel Echo упрощает подписку на каналы присутствия, которые предоставляют информацию о том, кто прослушивает данный канал:
Echo.join('chat.' + roomId)
.here((users) => {
//
})
.joining((user) => {
console.log(user.name);
})
.leaving((user) => {
console.log(user.name);
});
Подробнее об Echo и вещании событий читайте в полной документации.
Laravel Passport (Сервер OAuth2)
На Laracasts есть бесплатный видео-урок по этой теме.
В Laravel 5.3 реализована простая API аутентификация с помощью Laravel Passport, который предоставляет полную реализацию сервера OAuth2 для вашего приложения в считанные минуты. Passport создан на основе сервера League OAuth2, созданного Алексом Билби.
Passport упрощает создание токенов доступа с помощью кодов авторизации OAuth2. Также вы можете позволить своим пользователям создавать «персональные токены доступа» с помощью вашего веб-UI. Чтобы вы могли быстрее разобраться, Passport содержит Vue-компоненты, которые могут служить отправной точкой для вашей панели управления OAuth2, позволяя пользователям создавать клиентов, отзывать токены доступа и многое другое:
<passport-clients></passport-clients>
<passport-authorized-clients></passport-authorized-clients>
<passport-personal-access-tokens></passport-personal-access-tokens>
Если вы не хотите использовать Vue-компоненты, вы можете предоставить свою собственную фронтенд-панель для управления клиентами и токенами доступа. Passport предоставляет простой JSON API, который вы можете использовать с любым JavaScript-фреймворком на ваш выбор.
Разумеется, Passport также позволяет легко определить ограничения токенов доступа, которые могут быть запрошены приложением, использующим ваш API:
Passport::tokensCan([
'place-orders' => 'Разместить новые заказы',
'check-status' => 'Проверить статус заказа',
]);
Кроме того, в Passport есть вспомогательный посредник для проверки того, что аутентифицированный токеном доступа запрос содержит необходимые ограничения токена:
Route::get('/orders/{order}/status', function (Order $order) {
// Токен доступа имеет ограничение "проверить-статус"...
})->middleware('scope:check-status');
И наконец, Passport поддерживает использование вашего собственного API в вашем JavaScript-приложении, позволяя не беспокоиться о передаче токенов доступа. Это достигается при помощи шифрованных JWT-cookie и синхронизированных CSRF-токенов, позволяя вам сконцентрироваться на том, что важно, — вашем приложении. Подробнее о Passport читайте в полной документации.
Поиск (Laravel Scout)
Laravel Scout предоставляет простое решение на основе драйверов для добавления полнотекстового поиска в ваши Eloquent-модели. С помощью наблюдателей за моделями Scout будет автоматически синхронизировать ваши поисковые индексы с вашими записями Eloquent. Сейчас Scout поставляется с драйвером Algolia, однако, создавать свои драйверы просто, и вы можете дополнить Scout своей собственной реализацией поиска.
Делать модели доступными для поиска так же просто, как добавить типаж Searchable в модель:
<?php
namespace App;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use Searchable;
}
Когда типаж добавлен в вашу модель, её информация будет синхронизироваться с вашими поисковыми индексами при сохранении модели:
$order = new Order;
// ...
$order->save();
Когда ваши модели проиндексированы, можно легко выполнять полнотекстовый поиск по всем вашим моделям. Вы можете даже сделать страничный вывод для результатов поиска:
return Order::search('Star Trek')->get();
return Order::search('Star Trek')->where('user_id', 1)->paginate();
Разумеется, Scout имеет многие другие возможности, описанные в полной документации.
Почтовые объекты
На Laracasts есть бесплатный видео-урок по этой теме.
Laravel 5.3 поддерживает почтовые объекты. Эти объекты позволяют вам представлять ваши email-сообщения в виде простых объектов вместо того, чтобы настраивать письма в замыканиях. Например, вы можете определить простой почтовый объект для письма «welcome»:
class WelcomeMessage extends Mailable
{
use Queueable, SerializesModels;
/**
* Создать сообщение.
*
* @return $this
*/
public function build()
{
return $this->view('emails.welcome');
}
}
После определения почтового объекта вы можете отправить его пользователю с помощью простого и выразительного API. Почтовые объекты позволяют легко определить цель сообщения при просмотре вашего кода:
Mail::to($user)->send(new WelcomeMessage);
Само собой, вы можете пометить почтовый объект как объект «для очереди», тогда он будет отправлен в фоновом режиме вашими обработчиками очереди:
class WelcomeMessage extends Mailable implements ShouldQueue
{
//
}
Подробнее о почтовых объектах читайте в документации по email.
Хранение загруженных файлов
На Laracasts есть бесплатный видео-урок по этой теме.
Один из самых распространённых сценариев хранения файлов в веб-приложениях — хранение файлов, загружаемых пользователем, таких как изображение для профиля, фотографии и документы. Laravel 5.3 позволяет очень просто сохранять загружаемые файлы с помощью нового метода PHPstore()
на экземпляре загруженного файла. Просто вызовите метод PHPstore()
, указав путь для сохранения загруженного файла:
/**
* Изменить аватар пользователя.
*
* @param Request $request
* @return Response
*/
public function update(Request $request)
{
$path = $request->file('avatar')->store('avatars', 's3');
return $path;
}
Подробнее о хранении загруженных файлов читайте в полной документации.
Webpack и Laravel Elixir
Вместе с Laravel 5.3 вышла версия Laravel Elixir 6.0 с встроенной поддержкой для сборщиков модулей Webpack и Rollup JavaScript. Теперь файл gulpfile.js в Laravel 5.3 по умолчанию использует Webpack для компилирования вашего JavaScript. В полной документации по Elixir содержится подробная информация об обоих этих сборщиках:
elixir(mix => {
mix.sass('app.scss')
.webpack('app.js');
});
Структура фронтенда
На Laracasts есть бесплатный видео-урок по этой теме.
В Laravel 5.3 более современная структура фронтенда. Это повлияло главным образом на заготовку аутентификации shmake:auth
. Вместо загрузки ресурсов фронтенда из CDN зависимости указаны в стандартном файле package.json.
Кроме того, теперь сразу «из коробки» поддерживаются однофайловые Vue-компоненты. Пример компонента Example.vue находится в каталоге resources/assets/js/components. Более того, новый файл resources/assets/js/app.js загружает и настраивает ваши JavaScript-библиотеки и при необходимости Vue-компоненты.
Эта структура обеспечивает лучшую основу для начала разработки современных, надёжных JavaScript-приложений, не требуя от вашего приложения использования какого-либо из этих JavaScript и CSS фреймворка. Подробнее о том, как начать разработку современного фронтенда на Laravel, читайте в новом вводном разделе о фронтенде.
Файлы маршрутов
По умолчанию свежее приложение Laravel 5.3 содержит два файла HTTP-машрутов в новой директории верхнего уровня routes. Файлы маршрутов web и api обеспечивают более явное понимание того, как разделяются маршруты для вашего веб-интерфейса и вашего API. RouteServiceProvider автоматически назначает префикс api маршрутам из файла api.
Консольные команды замыкания
В добавление к тому, что Artisan-команды определены как классы, теперь они могут быть определены как простые замыкания в методе PHPcommands()
вашего файла app/Console/Kernel.php. В свежих приложениях Laravel 5.3 метод PHPcommands()
загружает файл routes/console.php, который позволяет вам определять ваши консольные команды как «маршрутоподобные» точки входа в ваше приложение на основе замыканий:
Artisan::command('build {project}', function ($project) {
$this->info('Building project...');
});
Подробнее о командах замыканиях читайте в полной документации по Artisan.
Переменная PHP$loop
На Laracasts есть бесплатный видео-урок по этой теме.
В циклах внутри Blade-шаблонов будет доступна переменная %%$loop%. Эта переменная предоставляет доступ к некоторым полезным данным, таким как текущий индекс цикла, и является ли данная итерация цикла первой или последней:
@foreach ($users as $user)
@if ($loop->first)
Это первая итерация.
@endif
@if ($loop->last)
Это последняя итерация.
@endif
<p>Это пользователь {{ $user->id }}</p>
@endforeach
Подробнее читайте в полной документации по Blade
Laravel 5.2
В Laravel 5.2 вошли такие улучшения, как поддержка нескольких драйверов аутентификации, неявная привязка модели, упрощение глобальных заготовок Eloquent, оптимизация создания заготовок для аутентификации, группы посредников, посредник для ограничения скорости, улучшения проверки ввода массивов, и много другое.
Драйверы аутентификации
В предыдущих версиях Laravel изначально поддерживался только один драйвер аутентификации — драйвер на основе сессий. В вашем приложении мог быть только один экземпляр аутентифицируемой модели.
В Laravel 5.2 вы можете определить дополнительные драйверы аутентификации, а также определить несколько аутентифицируемых моделей или таблиц пользователей, и контролировать процесс их аутентификации отдельно друг от друга. Например, если у вас есть одна таблица для администраторов и другая таблица для обучаемых, вы можете использовать методы Auth для каждой их них отдельно.
Заготовка аутентификации
Аутентификация в Laravel и без того довольно проста в настройке, но в Laravel 5.2 появился удобный и быстрый способ создания заготовок для представлений аутентификации для вашего «бэкенда». Просто выполните команду shmake:auth
в терминале:
shphp artisan make:auth
Эта команда сгенерирует совместимые с начальной загрузкой пустые представления для входа пользователя, регистрации и сброса пароля. Также эта команда дополнит ваш файл маршрутов соответствующими маршрутами.
Эта возможность предназначена только для новых приложений, и не подходит для обновления приложений.
Неявная привязка модели
Явная привязка модели затрудняет внедрение соответствующих моделей непосредственно в ваши маршруты и контроллеры. Например, предположим у вас есть маршрут, определённый таким образом:
use App\User;
Route::get('/user/{user}', function (User $user) {
return $user;
});
В Laravel 5.1 вам бы пришлось использовать метод PHPRoute::model()
, чтобы указать Laravel, что надо внедрить экземпляр PHPApp\User
, соответствующий параметру PHP{user}
в определении вашего маршрута. А в Laravel 5.2 фреймворк автоматически внедрит эту модель на основе сегмента URI, позволяя вам быстро получить доступ к нужным экземплярам модели.
Laravel автоматически внедрит модель, если сегмент параметра маршрута (PHP{user}
) совпадает с замыканием маршрута или именем соответствующей переменной метода контроллера (PHP$user
), и переменная указывает тип класса модели Eloquent.
Группы посредников
Группы посредников позволяют вам объединять несколько посредников маршрутов одним удобным ключом и назначать на маршрут сразу несколько посредников. Например, это может пригодится при создании веб-интерфейса и API в одном приложении. Вы можете сгруппировать маршруты сессии и CSRF в группу PHP'web'
, а ограничитель скорости в группу PHP'api'
.
На самом деле по умолчанию структура приложения в Laravel 5.2 использует именно такой подход. Например, в стандартном файле App\Http\Kernel.php вы найдёте вот что:
/**
* Группы посредников маршрутов приложения.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
Теперь группа PHP'web'
может быть назначена на маршрут вот так:
Route::group(['middleware' => ['web']], function () {
//
});
Но не забывайте, что группа посредников PHP'web'
уже применяется к вашим маршрутам по умолчанию, так как RouteServiceProvider включает её в группу посредников по умолчанию.
Ограничение скорости
Теперь во фреймворк включён новый посредник ограничения скорости, позволяющий вам легко ограничить количество запросов, которое может выполнить указанный IP за определённое число минут. Например, для ограничения количества запросов от одного IP-адреса до 60 в минуту сделайте так:
Route::get('/api/users', ['middleware' => 'throttle:60,1', function () {
//
}]);
Проверка ввода массивов
В Laravel 5.2 стало намного проще проверять ввод массивов через поля форм. Например, для проверки того, что каждый e-mail в данном поле ввода массива уникален, сделайте так:
$validator = Validator::make($request->all(), [
'person.*.email' => 'email|unique:users'
]);
Более того, вы можете использовать символ * при написании сообщений для проверки ввода в ваших языковых файлах, что позволяет использовать одно сообщение для полей ввода массивов:
'custom' => [
'person.*.email' => [
'unique' => 'Каждый пользователь должен иметь уникальный e-mail',
]
],
== Правило проверки ввода Bail ===
Добавлено новое правило проверки ввода PHPbail
, оно останавливает валидатор после первой неудачной проверки по данному правилу. Например, вы можете отменить проверку значения на уникальность PHPunique
, если оно не прошло проверку на PHPinteger
:
$this->validate($request, [
'user_id' => 'bail|integer|unique:users'
]);
Улучшения глобальных заготовок Eloquent
В предыдущих версиях Laravel глобальные заготовки Eloquent были сложными и приводили к появлению ошибок. Но в Laravel 5.2 глобальные заготовки запросов требуют от вас реализации только одного простого метода PHPapply()
.
Подробнее о написании глобальных заготовок читайте в полной документации по Eloquent.
Laravel 5.1.11
В Laravel 5.1.11 добавлена поддержка авторизации прямо из коробки! Удобно организуйте логику авторизации ваше приложения при помощи простых обратных вызовов или классов политик, и авторизуйте действия при помощи простых и выразительных методов.
Подробнее читайте в документации по авторизации.
Laravel 5.1.4
В Laravel 5.1.4 добавлена простая блокировка входа в приложение. Подробнее читайте в документации по аутентификации.
Laravel 5.1
В Laravel 5.1 продолжены сделанные в Laravel 5.0 улучшения по применению стандарта PSR-2, и добавлено вещание событий, параметры посредников, улучшения Artisan, и многое другое.
PHP 5.5.9+
Поскольку PHP 5.4 в сентябре «перестанет жить», и для него больше не будет обновлений безопасности от команды разработки PHP, Laravel 5.1 требует PHP 5.5.9 или выше. PHP 5.5.9 обеспечивает совместимость с последними версиями популярных PHP-библиотек, таких как Guzzle и AWS SDK.
LTS
Laravel 5.1 — первый выпуск Laravel, поддерживающий долгосрочную поддержку (long term support). Для Laravel 5.1 будет обеспечено исправление ошибок в течение 2 лет и исправление ошибок безопасности в течение 3 лет. Это наибольший срок поддержки для вышедших версий Laravel, он обеспечивает стабильность и уверенность для больших, корпоративных клиентов и заказчиков.
PSR-2
Руководство по стилю программирования PSR-2 принято стандартом для стиля разработки фреймворка Laravel. Вдобавок, все генераторы обновлены для генерирования PSR-2-совместимого синтаксиса.
Документация
Каждая страница документации Laravel тщательно отредактирована и значительно исправлена. Все примеры кода также пересмотрены и расширены для обеспечения большей релевантности и понимания контекста.
Вещание событий
Во многих современных веб-приложениях используются веб-сокеты для реализации живых интерфейсов пользователя, работающих в реальном времени. Когда на сервере обновляются какие-либо данные, по веб-сокет соединению отправляется сообщение для обработки клиентом.
Чтобы помочь вам в создании приложений такого типа, Laravel позволяет легко «вещать» ваши события по веб-сокет соединению. Вещание ваших событий Laravel позволяет вам использовать одинаковые названия событий в вашем коде на стороне сервера и вашем JavaScript-фреймворке на стороне клиента.
Подробнее о вещании событий читайте в документации событий.
Параметры посредников
Теперь посредники могут принимать дополнительные параметры. Например, если в вашем приложении необходима проверка наличия у пользователя необходимой «роли» для выполнения данного действия, вы можете создать посредника RoleMiddleware, который принимает название роли в качестве дополнительного аргумента:
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware
{
/**
* Запуск фильтра запроса.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// Переадресация...
}
return $next($request);
}
}
Параметры посредника можно указать при определении маршрута, разделив двоеточием название посредника и его параметры. Несколько параметров разделяются между собой запятыми:
Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
//
}]);
Подробнее о посредниках читайте в документации посредников.
Пересмотр тестирования
Встроенные в Laravel возможности для тестирования были значительно улучшены. Набор новых методов обеспечивает гибкий и выразительный интерфейс для взаимодействия с вашим приложением и проверки его откликов. Например, взгляните на следующий тест:
public function testNewUserRegistration()
{
$this->visit('/register')
->type('Taylor', 'name')
->check('terms')
->press('Register')
->seePageIs('/dashboard');
}
Подробнее о тестировании читайте в документации по тестированию.
Фабрики моделей
Теперь Laravel содержит простой способ для создания заглушек Eloquent-моделей при помощи фабрик моделей. Фабрики моделей позволяют вам легко задать набор «стандартных» атрибутов для вашей Eloquent-модели, и затем сгенерировать экземпляры тестовой модели для ваших тестов и тестовые данные для БД. Также фабрики моделей содержат полезные возможности мощной PHP-библиотеки Faker для генерирования случайных данных:
$factory->define(App\User::class, function ($faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => str_random(10),
'remember_token' => str_random(10),
];
});
Подробнее о фабриках моделей читайте в документации.
Улучшения Artisan
Теперь Artisan-команды можно определить с помощью простой, маршруто-подобной «сигнатуры», которая обеспечивает чрезвычайно простой интерфейс для определения аргументов и параметров командной строки. Например, вы можете определить простую команду и её параметры таким образом:
/**
* Имя и сигнатура терминальной команды.
*
* @var string
*/
protected $signature = 'email:send {user} {--force}';
Подробнее об определении Artisan-команд читайте в документации Artisan.
Структура папок
Для большего соответствия своему назначению папка app/Commands переименована в app/Jobs. Также папка app/Handlers собрана в единую папку app/Listeners, которая содержит слушатели событий. Однако, эти изменения не обязательны, и вам не требуется обновлять структуру папок для использования Laravel 5.1.
Шифрование
В предыдущих версиях Laravel за шифрование отвечало PHP-расширение mcrypt. А теперь, начиная с Laravel 5.1, за шифрование отвечает расширение openssl, которое развивается намного активнее.
Laravel 5.0
В Laravel 5.0 введена новая структура приложения для проекта Laravel по умолчанию. Эта новая структура служит лучшей основой для построения надёжных приложений на Laravel, а также обеспечивает поддержку стандартов автозагрузки (PSR-4) для всего приложения. Для начала давайте рассмотрим некоторые основные новшества.
Новая структура папок
Старая папка app/models была полностью удалена. Вместо этого весь ваш код теперь располагается прямо в папке app и по умолчанию попадает в пространство имён App. Это пространство имён по умолчанию можно быстро изменить с помощью новой Artisan-команды shapp:name
.
Контроллеры, посредники и запросы (новый тип классов в Laravel 5.0) теперь сгруппированы в папке app/Http, так как все они связаны с транспортным уровнем HTTP вашего приложения. Вместо единого, длинного файла фильтров маршрутов теперь все посредники разбиты по своим отдельным файлам классов.
Новая папка app/Providers заменила файлы app/start из предыдущей версии Laravel 4.x. Эти сервис-провайдеры предоставляют различные функции начальной загрузки для вашего приложения, такие как обработка ошибок, ведение журналов, загрузка маршрутов и т.д. Само собой, вы можете создавать дополнительные сервис-провайдеры для своего приложения.
Языковые файлы приложения и шаблоны переместились в папку resources.
Контракты
Все основные компоненты Laravel реализуют интерфейсы, расположенные в репозитории illuminate/contracts. У репозитория нет внешних зависимостей. Наличие удобного, централизованного набора интерфейсов, который вы можете использовать для отвязки и внедрения зависимостей, может служить простой альтернативой для фасадов Laravel.
Подробнее о контрактах читайте в полной документации.
Кэширование маршрутов
Если ваше приложение полностью состоит из маршрутов контроллеров, вы можете использовать новую Artisan-команду shroute:cache
для радикального ускорения регистрации ваших маршрутов. Это особенно полезно для приложений с числом маршрутов 100+. Эта часть вашего приложения получит радикальное ускорение.
Посредники маршрутов
Вдобавок к «фильтрам» маршрутов из Laravel 4 теперь в версии 5 поддерживаются HTTP-посредники, а встроенная авторизация и CSRF-"фильтры" преобразованы в посредников. Посредники предоставляют единый, цельный интерфейс для замены всех типов фильтров, позволяя вам легко проверять, и даже отклонять запросы до того, как они попадут в ваше приложение.
Подробнее о посредниках читайте в полной документации.
Внедрение методов контроллера
Вдобавок к существующему внедрению конструктора теперь вы можете указывать типы зависимостей в методах контроллера. Сервис-контейнер автоматически внедрит зависимости, даже если маршрут содержит другие параметры:
public function createPost(Request $request, PostRepository $posts)
{
//
}
Преднастроенная авторизация
Контроллеры регистрации, авторизации и сброса паролей пользователей теперь встроены сразу из коробки, а также соответствующие им простые шаблоны, расположенные в resources/views/auth. Вдобавок миграция таблицы «users» была включена во фреймворк. Наличие этих простых ресурсов позволяет ускорить разработку идей для приложения, не увязая в создании шаблонной авторизации. Шаблоны авторизации доступны по маршрутам auth/login и auth/register. Сервис App\Services\Auth\Registrar отвечает за проверку данных и создание пользователей.
Объекты событий
Теперь вы можете определять события как объекты вместо простого использования строк. Например, взгляните на такое событие:
class PodcastWasPurchased {
public $podcast;
public function __construct(Podcast $podcast)
{
$this->podcast = $podcast;
}
}
Событие может быть отправлено как обычно:
Event::fire(new PodcastWasPurchased($podcast));
Само собой, ваш обработчик событий получит объект события вместо списка данных:
class ReportPodcastPurchase {
public function handle(PodcastWasPurchased $event)
{
//
}
}
Подробнее о работе с событиями читайте в полной документации.
Команды / Очереди
Вдобавок к поддерживаемому в Laravel 4 формату очередей команд в Laravel 5 можно представлять ваши задачи для очереди как простые объекты команд. Эти команды живут в папке app/Commands. Вот пример команды:
class PurchasePodcast extends Command implements SelfHandling, ShouldBeQueued {
use SerializesModels;
protected $user, $podcast;
/**
* Создание нового экземпляра команды.
*
* @return void
*/
public function __construct(User $user, Podcast $podcast)
{
$this->user = $user;
$this->podcast = $podcast;
}
/**
* Выполнение команды.
*
* @return void
*/
public function handle()
{
// Обработка логики покупки подкаста...
event(new PodcastWasPurchased($this->user, $this->podcast));
}
}
Базовый контроллер Laravel использует новый типаж DispatchesCommands, позволяя вам легко отправлять ваши команды на выполнение:
$this->dispatch(new PurchasePodcastCommand($user, $podcast));
Конечно, вы можете использовать команды также и для команд, выполняющихся синхронно (не в очереди). На самом деле, использование команд — отличный способ инкапсулировать сложные задачи, которые необходимо выполнять вашему приложению. Более подробно об этом написано в документации по командной шине.
Очередь БД
Драйвер очереди database теперь включён в Laravel — это простой, локальный драйвер очереди, не требующий установки дополнительных пакетов кроме ПО вашей БД.
Планировщик Laravel
Раньше разработчикам приходилось создавать Cron-задачи для каждой консольной команды, которую они хотели запланировать. Это утомительно. Для планирования консольных команд теперь не ведётся контроль версий, и для добавления Cron-задач вам необходимо подключаться к серверу по SSH. Давайте упростим нам жизнь. Планировщик команд Laravel позволяет вам гибко и выразительно задавать план команд в самом Laravel, а на сервере нужна только одна Cron-задача.
$schedule->command('artisan:command')->dailyAt('15:00');
Чтобы узнать всё о планировщике, загляните в полную документацию!
Tinker / Psysh
Теперь команда shphp artisan tinker
использует Psysh от Джастина Хильмана, более надёжный REPL для PHP. Если вам нравился Boris в Laravel 4, то вы полюбите Psysh. И более того — он работает в Windows! Для начала просто попробуйте:
php artisan tinker
DotEnv
Вместо множества сбивающих с толку, вложенных папок с настройками среды, Laravel 5 теперь использует DotEnv от Ванса Лукаса. Эта библиотека предоставляет простой способ управления вашими настройками сред, и делает простым определение среды в Laravel 5.Подробнее читайте в официальной документации.
Laravel Elixir
Laravel Elixir от Джеффри Вэя предоставляет гибкий, выразительный интерфейс для компилирования и соединения ваших ресурсов. Если вы имели печальный опыт изучения Grunt или Gulp, то эти страшные времена позади. Elixir помогает начать пользоваться Gulp для компилирования ваших Less, Sass и CoffeeScript. Он может даже запустить ваши тесты для вас!
Подробнее об Elixir читайте в официальной документации.
Laravel Socialite
Laravel Socialite — необязательный, совместимый с Laravel 5.0+ пакет, обеспечивающий безболезненную авторизацию с помощью провайдеров OAuth. На данный момент Socialite поддерживает работу с Facebook, Twitter, Google и GitHub. Вот как это выглядит:
public function redirectForAuth()
{
return Socialize::with('twitter')->redirect();
}
public function getUserFromProvider()
{
$user = Socialize::with('twitter')->user();
}
Больше не надо тратить часы на написание потоков авторизации OAuth. Начните за несколько минут! В полной документации есть все подробности.
Интеграция Flysystem
Теперь Laravel содержит мощную библиотеку для абстракции файловой системы Flysystem, обеспечивающую безболезненную интеграцию с локальным хранилищем, облачными хранилищами Amazon S3 и Rackspace — всё в одном, едином и элегантном API! Хранить файлы в Amazon S3 теперь вот так просто:
Storage::put('file.txt', 'contents');
Более подробно об интеграции Laravel Flysystem читайте в полной документации.
Запросы форм
В Laravel 5.0 введены запросы форм, которые наследуют класс Illuminate\Foundation\Http\FormRequest. Эти объекты запросов могут быть совмещены с внедрением методов контроллера для обеспечения метода проверки ввода пользователей, без необходимости написания шаблонного кода. Давайте разберёмся подробнее и взглянем на пример PHPFormRequest
:
<?php namespace App\Http\Requests;
class RegisterRequest extends FormRequest {
public function rules()
{
return [
'email' => 'required|email|unique:users',
'password' => 'required|confirmed|min:8',
];
}
public function authorize()
{
return true;
}
}
Когда класс определён, мы можем указать его тип в нашем действии контроллера:
public function register(RegisterRequest $request)
{
var_dump($request->input());
}
Когда сервис-контейнер Laravel определяет, что внедряемый им класс — это экземпляр FormRequest, запрос автоматически пройдёт проверку. Это значит, что если вызвано действие вашего контроллера, то вы можете быть уверены, что ввод HTTP-запроса прошёл проверку по тем правилам, которые вы указали в классе запроса формы. Более того, если запрос некорректен, будет автоматически вызвана HTTP-переадресация, которую вы можете настроить, а сообщение об ошибке будет либо передано в сессию, либо преобразовано в JSON. Проверка форм никогда не была настолько простой. Подробнее о проверке FormRequest читайте в документации.
Простая проверка запроса контроллера
Базовый контроллер Laravel 5 теперь содержит типаж ValidatesRequests. Этот типаж предоставляет простой метод PHPvalidate
для проверки входящих запросов. Если FormRequests для вашего приложения избыточен, попробуйте это:
public function createPost(Request $request)
{
$this->validate($request, [
'title' => 'required|max:255',
'body' => 'required',
]);
}
Если проверка неудачна, будет выброшено исключение, и нужный HTTP-отклик будет автоматически возвращён в браузер. Ошибки при проверки будут переданы даже в сессию! Если запрос был AJAX-запросом, то Laravel даже позаботиться об отправке JSON-представления ошибок проверки обратно к вам.
Подробнее об этом новом методе читайте в документации.
Новые генераторы
В дополнение к новой структуре приложения по умолчанию в фреймворк были добавлены новые Artisan-команды генераторы. Для подробностей посмотрите shphp artisan list
.
Кэш настроек
Теперь вы можете кэшировать все свои настройки в едином файле с помощью команды shconfig:cache
.
Symfony VarDumper
Популярная вспомогательная функция PHPdd
, которая сохраняет переменную отладочную информацию, была переведена на использование восхитительного Symfony VarDumper. Это обеспечивает цветовое выделение вывода и даже сворачивание массивов. Просто попробуйте сделать так в своём проекте:
dd([1, 2, 3]);
Laravel 4.2
Полный список изменений этой версии можно увидеть, выполнив команду php artisan changes в установленной версии 4.2 или посмотреть в файле изменений на Github. В это описание вошли только значительные улучшения и изменения данной версии.
Примечание: Во время разработки версии 4.2 многие небольшие исправления и улучшения были включены в различные подверсии Laravel 4.1. Поэтому не забудьте также ознакомиться со списком изменений Laravel 4.1!
Требование PHP 5.4
Laravel 4.2 требует PHP 5.4 или выше. Это обновлённое требование PHP позволяет нам использовать новые возможности PHP, такие как типажи, чтобы обеспечивать более выразительные интерфейсы для таких инструментов как Laravel Cashier. Также PHP 5.4 даёт преимущество в скорости и производительности по сравнению с PHP 5.3.
Laravel Forge
Laravel Forge (кузница) — новое веб-приложение для простого создания и управления
PHP-серверами в облаке по вашему выбору, включая Linode, DigitalOcean, Rackspace и Amazon EC2. Поддерживая автоматическую настройку Nginx, доступ по ключам SSH, автоматизацию работы Cron, мониторинг серверов через NewRelic & Papertrail, «Push To Deploy» («нажми, чтобы развернуть»), настройку обработчика очереди Laravel, и многое другое, Forge предоставляет наиболее простой и доступный способ для запуска всех ваших приложений Laravel.
Сейчас установочный файл конфигурации Laravel 4.2 app/config/database.php по умолчанию настроен на использование Forge, что обеспечивает более удобное развёртывание свежих приложений на платформе.
Больше информации о Laravel Forge можно найти на официальном сайте Forge.
Laravel Homestead
Laravel Homestead (ферма) — официальное окружение Vagrant для разработки надёжных приложений на Laravel и PHP. Подавляющее большинство необходимых для коробок операций обрабатывается перед тем, как коробка подготавливается к распространению, что позволяет ей загружаться чрезвычайно быстро. Homestead включает в себя Nginx 1.6, PHP 5.5.12, MySQL, Postgres, Redis, Memcached, Beanstalk, Node, Gulp, Grunt и Bower. Homestead содержит простой конфигурационный файл Homestead.yaml для управления несколькими приложениями Laravel в одной коробке.
Сейчас по умолчанию установленный Laravel 4.2 содержит файл конфигурации app/config/local/database.php, который настроен на использование базы данных Homestead, что делает начальную установку и настройку Laravel удобнее.
В официальную документацию также была включена документация Homestead.
Laravel Cashier
Laravel Cashier (кассир) — простая, удобная библиотека для управления подписками биллинга с помощью Stripe. Начиная с версии Laravel 4.2, мы добавили документацию по Cashier к основной документации Laravel, хотя установка самого компонента по-прежнему не обязательна. Эта версия Cashier содержит много исправлений, поддерживает множество валют и совместима с последним Stripe API.
Обработчики очереди — демоны
Команда Artisan queue:work теперь поддерживает параметр --daemon для запуска обработчика в «режиме демона», это значит, что обработчик будет продолжать выполнять работу без перезагрузки фреймворка. Это приводит к значительному снижению загрузки процессора за счёт несколько более сложного процесса развёртывания приложения.
Больше информации о демонах — обработчиках очереди можно найти в документации по очередям.
Драйверы Mail API
В Laravel 4.2 вошли новые драйверы Mailgun и Mandrill API для функций PHPMail
. Для многих приложений это обеспечивает более быстрый и надёжный способ отправки электронной почты, чем варианты SMTP. Новые драйверы используют HTTP библиотеку Guzzle 4.
Мягко удаляемые типажи
Более чистая архитектура для «мягких удалений» и других «глобальных областей» была добавлена в PHP 5.4 с помощью типажей. Эта новая архитектура позволяет проще создавать подобные глобальные типажи и чище разделять задачи внутри самого фреймворка.
Больше информации о новых PHPSoftDeletingTrait
можно найти в документации Eloquent.
Удобная аутентификация и запоминаемые типажи
Теперь Laravel 4.2 по-умолчанию использует простые типажи, содержащие необходимые свойства для пользовательских интерфейсов аутентификации и напоминания паролей. Это обеспечивает более чистый файл модели PHPUser
по умолчанию.
«Simple Paginate»
В построитель запросов и Eloquent был добавлен метод PHPsimplePaginate
(простое разбиение на страницы), который обеспечивает более эффективные запросы при использовании простых ссылок «Далее» и «Назад» в вашем постраничном представлении.
Подтверждение миграций
Теперь в работающих приложениях деструктивные операции миграций будут запрашивать подтверждение. Команды можно выполнять без дополнительных подтверждений, используя параметр --force.
Laravel 4.1
Полный список изменений
Полный список изменений для этой версии можно увидеть, выполнив команду PHPphp artisan changes
в установленной версии 4.1 или посмотреть файл изменений на Github. Это описание содержит только основные улучшения и изменения в версии.
Новый компонент SSH
В эту версию вошёл полностью новый компонент PHPSSH
. Эта функция позволяет вам легко подключаться через SSH к удалённым серверам и выполнять команды. Чтобы узнать больше, загляните в документацию компонента SSH.
Новая команда php artisan tail использует новый компонент SSH. Чтобы узнать больше, загляните в документацию команды tail.
Boris в Tinker
Теперь команда php artisan tinker использует Boris REPL, если ваша система поддерживает его. Для использования этой возможности должны быть установлены расширения PHP readline и pcntl. Если у вас нет этих расширений, будет использована оболочка из 4.0.
Улучшения Eloquent
В Eloquent добавлено новое отношение PHPhasManyThrough
. Посмотрите, как им пользоваться, в документации Eloquent.
Также был добавлен новый метод PHPwhereHas
для возможности получения моделей на основе ограничений отношений.
Подключения чтения/записи к БД
Теперь автоматическая обработка отдельных подключений чтения/записи доступна во всём слое БД, в том числе в построителе запросов и Eloquent. Чтобы узнать больше, загляните в документацию.
Приоритет очереди
Теперь поддерживаются приоритеты очереди с помощью передачи в команду queue:listen списка, разделённого запятыми.
Обработка неудавшихся заданий очереди
Теперь в очередях есть возможность автоматической обработки неудавшихся заданий при использовании нового переключателя --tries в queue:listen. Больше информации об обработке неудавшихся заданий можно найти в документации очередей.
Тэги кэша
«Секции» кэша были заменены «тэгами». Тэги кэша позволяют назначать несколько «тэгов» элементу кэша и получать элементы по тэгу. Больше информации об использовании тэгов кэша можно найти в документации кэша.
Гибкие напоминатели паролей
Движок напоминателя паролей был изменён для обеспечения большей гибкости разработки при проверке паролей, выводе сообщений о состоянии в сессии, и т.д. Чтобы узнать больше об использовании расширенного движка напоминателя паролей, загляните в документацию.
Улучшенный движок путей
В Laravel 4.1 вошёл полностью переписанный слой путей. API прежний, но регистрация путей на все 100% быстрее по сравнению с 4.0. Весь движок был значительно упрощён, и зависимость от Symfony Routing была минимизирована до составления выражений для путей.
Улучшенный движок сессий
Также в версию вошёл полностью новый движок сессий. Также как и улучшения путей, новый слой сессий проще и быстрее. Мы больше не используем средства обработки сессий Symfony(а значит и PHP), а используем своё решение, которое проще и легче в обслуживании.
Doctrine DBAL
Если вы используете функцию PHPrenameColumn
в ваших миграциях, то вам надо будет добавить зависимость doctrine/dbal в ваш файл composer.json. Этот пакет больше не входит в Laravel по умолчанию.
Комментарии (1)
а по 8.х версии вообще собирается документация тут выходить? На laravel.su недавно вышла, но хотелось бы почитать об одном и том же с разных сторон.