{{TOC}} {{DOCVER 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11}} == Политика поддержки == Для LTS-версий, таких как Laravel 5.1, обеспечивается исправление ошибок в течение 2 лет и исправление ошибок безопасности в течение 3 лет. Такие версии имеют наибольший срок поддержки. Для обычных версий обеспечивается исправление ошибок в течение 6 месяцев и исправление ошибок безопасности в течение 1 года. == Laravel 5.3 == В Laravel 5.3 продолжены улучшения, сделанные в Laravel 5.2, добавлена ((//docs/v5/notifications система уведомлений)) на основе драйверов, надёжная поддержка режима реального времени с помощью ((//docs/v5/broadcasting Laravel Echo)), простая настройка серверов OAuth2 с помощью ((//docs/v5/passport Laravel Passport)), полнотекстовый поиск моделей с помощью ((//docs/v5/scout Laravel Scout)), поддержка Webpack в Laravel Elixir, "отправляемые по почте" объекты, явное разделение маршрутов %%(t)web%% и %%(t)api%%, консольные команды на основе замыканий, удобные вспомогательные функции для хранения загружаемых файлов, поддержка POPO и контроллеров одностороннего действия, улучшенная заготовка фронтенда по умолчанию, и многое другое. === Уведомления === .(alert) На Laracasts есть бесплатный ((https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/9 видео-урок)) по этой теме. Уведомления Laravel предоставляют простой, выразительный API для отправки уведомлений по различным каналам доставки, таким как email, Slack, SMS и другим. Например, вы можете определить уведомление об оплате счёта и доставлять его по email и SMS. Затем вы можете отправить уведомление с помощью одного простого метода: %% $user->notify(new InvoicePaid($invoice)); %% Для уведомлений уже создано огромное множество ((http://laravel-notification-channels.com созданных сообществом драйверов)), включая поддержку уведомлений для iOS и Android. Подробнее об уведомлениях читайте в ((//docs/v5/notifications полной документации)). === WebSockets / Вещание событий === Вещание событий есть и в предыдущих версиях Laravel, но в Laravel 5.3 оно значительно улучшено добавлением аутентификации на уровне канала для частных каналов и каналов присутствия WebSocket : %% /* * Аутентификация подписки на канал... */ Broadcast::channel('oders.*', function ($user, $orderId) { return $user->placedOrder($orderId); }); %% Выпущен Laravel Echo - JavaScript-пакет, устанавливаемый через NPM. Он обеспечивает простой, прекрасный API для подписок на каналы и прослушивания ваших событий на стороне сервера в вашем JavaScript-приложении на стороне клиента. Echo включает поддержку ((https://pusher.com Pusher)) и ((http://socket.io 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 и вещании событий читайте в ((//docs/v5/broadcasting полной документации)). === Laravel Passport (Сервер OAuth2) === .(alert) На Laracasts есть бесплатный ((https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/13 видео-урок)) по этой теме. В Laravel 5.3 реализована простая API аутентификация с помощью ((//docs/v5/passport Laravel Passport)), который предоставляет полную реализацию сервера OAuth2 для вашего приложения в считанные минуты. Passport создан на основе ((https://github.com/thephpleague/oauth2-server сервера League OAuth2)), созданного Алексом Билби. Passport упрощает создание токенов доступа с помощью кодов авторизации OAuth2. Также вы можете позволить своим пользователям создавать "персональные токены доступа" с помощью вашего веб-UI. Чтобы вы могли быстрее разобраться, Passport содержит ((https://vuejs.org Vue-компоненты)), которые могут служить отправной точкой для вашей панели управления OAuth2, позволяя пользователям создавать клиентов, отзывать токены доступа и многое другое: %% %% Если вы не хотите использовать 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 читайте в ((//docs/v5/passport полной документации)). === Поиск (Laravel Scout) === Laravel Scout предоставляет простое решение на основе драйверов для добавления полнотекстового поиска в ваши ((//docs/v5/eloquent Eloquent-модели)). С помощью наблюдателей за моделями Scout будет автоматически синхронизировать ваши поисковые индексы с вашими записями Eloquent. Сейчас Scout поставляется с драйвером ((https://www.algolia.com/ Algolia)), однако, создавать свои драйверы просто, и вы можете дополнить Scout своей собственной реализацией поиска. Делать модели доступными для поиска так же просто, как добавить типаж %%(t)Searchable%% в модель: %% save(); %% Когда ваши модели проиндексированы, можно легко выполнять полнотекстовый поиск по всем вашим моделям. Вы можете даже сделать страничный вывод для результатов поиска: %% return Order::search('Star Trek')->get(); return Order::search('Star Trek')->where('user_id', 1)->paginate(); %% Разумеется, Scout имеет многие другие возможности, описанные в ((//docs/v5/scout полной документации)). === Почтовые объекты === .(alert) На Laracasts есть бесплатный ((https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/6 видео-урок)) по этой теме. 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 { // } %% Подробнее о почтовых объектах читайте в ((//docs/v5/mail документации по email)). === Хранение загруженных файлов === .(alert) На Laracasts есть бесплатный ((https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/12 видео-урок)) по этой теме. Один из самых распространённых сценариев хранения файлов в веб-приложениях - хранение файлов, загружаемых пользователем, таких как изображение для профиля, фотографии и документы. Laravel 5.3 позволяет очень просто сохранять загружаемые файлы с помощью нового метода %%store()%% на экземпляре загруженного файла. Просто вызовите метод %%store()%%, указав путь для сохранения загруженного файла: %% /** * Изменить аватар пользователя. * * @param Request $request * @return Response */ public function update(Request $request) { $path = $request->file('avatar')->store('avatars', 's3'); return $path; } %% Подробнее о хранении загруженных файлов читайте в ((/docs/v5/filesystem#загрузка полной документации)). === Webpack и Laravel Elixir === Вместе с Laravel 5.3 вышла версия Laravel Elixir 6.0 с встроенной поддержкой для сборщиков модулей Webpack и Rollup JavaScript. Теперь файл %%(t)gulpfile.js%% в Laravel 5.3 по умолчанию использует Webpack для компилирования вашего JavaScript. В ((//docs/v5/elixir полной документации по Elixir)) содержится подробная информация об обоих этих сборщиках: %% elixir(mix => { mix.sass('app.scss') .webpack('app.js'); }); %% === Структура фронтенда === .(alert) На Laracasts есть бесплатный ((https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/4 видео-урок)) по этой теме. В Laravel 5.3 более современная структура фронтенда. Это повлияло главным образом на заготовку аутентификации %%(sh)make:auth%%. Вместо загрузки ресурсов фронтенда из CDN зависимости указаны в стандартном файле %%(t)package.json%%. Кроме того, теперь сразу "из коробки" поддерживаются однофайловые ((https://vuejs.org Vue-компоненты)). Пример компонента %%(t)Example.vue%% находится в каталоге %%(t)resources/assets/js/components%%. Более того, новый файл %%(t)resources/assets/js/app.js%% загружает и настраивает ваши JavaScript-библиотеки и при необходимости Vue-компоненты. Эта структура обеспечивает лучшую основу для начала разработки современных, надёжных JavaScript-приложений, не требуя от вашего приложения использования какого-либо из этих JavaScript и CSS фреймворка. Подробнее о том, как начать разработку современного фронтенда на Laravel, читайте в новом ((//docs/v5/frontend вводном разделе о фронтенде)). === Файлы маршрутов === По умолчанию свежее приложение Laravel 5.3 содержит два файла HTTP-машрутов в новой директории верхнего уровня %%(t)routes%%. Файлы маршрутов %%(t)web%% и %%(t)api%% обеспечивают более явное понимание того, как разделяются маршруты для вашего веб-интерфейса и вашего API. %%(t)RouteServiceProvider%% автоматически назначает префикс %%(t)api%% маршрутам из файла %%(t)api%%. === Консольные команды замыкания === В добавление к тому, что Artisan-команды определены как классы, теперь они могут быть определены как простые замыкания в методе %%commands()%% вашего файла %%(t)app/Console/Kernel.php%%. В свежих приложениях Laravel 5.3 метод %%commands()%% загружает файл %%(t)routes/console.php%%, который позволяет вам определять ваши консольные команды как "маршрутоподобные" точки входа в ваше приложение на основе замыканий: %% Artisan::command('build {project}', function ($project) { $this->info('Building project...'); }); %% Подробнее о командах замыканиях читайте в ((//docs/v5/artisan#команды полной документации по Artisan)). === Переменная %%$loop%% === .(alert) На Laracasts есть бесплатный ((https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/7 видео-урок)) по этой теме. В циклах внутри Blade-шаблонов будет доступна переменная %%$loop%. Эта переменная предоставляет доступ к некоторым полезным данным, таким как текущий индекс цикла, и является ли данная итерация цикла первой или последней: %% @foreach ($users as $user) @if ($loop->first) Это первая итерация. @endif @if ($loop->last) Это последняя итерация. @endif

Это пользователь {{ $user->id }}

@endforeach %% Подробнее читайте в ((/docs/v5/blade#переменная полной документации по Blade)) == Laravel 5.2 == В Laravel 5.2 вошли такие улучшения, как поддержка нескольких драйверов аутентификации, неявная привязка модели, упрощение глобальных заготовок Eloquent, оптимизация создания заготовок для аутентификации, группы посредников, посредник для ограничения скорости, улучшения проверки ввода массивов, и много другое. === Драйверы аутентификации === В предыдущих версиях Laravel изначально поддерживался только один драйвер аутентификации - драйвер на основе сессий. В вашем приложении мог быть только один экземпляр аутентифицируемой модели. В Laravel 5.2 вы можете определить дополнительные драйверы аутентификации, а также определить несколько аутентифицируемых моделей или таблиц пользователей, и контролировать процесс их аутентификации отдельно друг от друга. Например, если у вас есть одна таблица для администраторов и другая таблица для обучаемых, вы можете использовать методы //Auth// для каждой их них отдельно. === Заготовка аутентификации === Аутентификация в Laravel и без того довольно проста в настройке, но в Laravel 5.2 появился удобный и быстрый способ создания заготовок для представлений аутентификации для вашего "бэкенда". Просто выполните команду %%(sh)make:auth%% в терминале: %%(sh) php artisan make:auth %% Эта команда сгенерирует совместимые с начальной загрузкой пустые представления для входа пользователя, регистрации и сброса пароля. Также эта команда дополнит ваш файл маршрутов соответствующими маршрутами. .(alert) Эта возможность предназначена только для новых приложений, и не подходит для обновления приложений. === Неявная привязка модели === Явная привязка модели затрудняет внедрение соответствующих моделей непосредственно в ваши маршруты и контроллеры. Например, предположим у вас есть маршрут, определённый таким образом: %% use App\User; Route::get('/user/{user}', function (User $user) { return $user; }); %% В Laravel 5.1 вам бы пришлось использовать метод %%Route::model()%%, чтобы указать Laravel, что надо внедрить экземпляр %%App\User%%, соответствующий параметру %%{user}%% в определении вашего маршрута. А в Laravel 5.2 фреймворк **автоматически** внедрит эту модель на основе сегмента URI, позволяя вам быстро получить доступ к нужным экземплярам модели. Laravel автоматически внедрит модель, если сегмент параметра маршрута (%%{user}%%) совпадает с замыканием маршрута или именем соответствующей переменной метода контроллера (%%$user%%), и переменная указывает тип класса модели Eloquent. === Группы посредников === Группы посредников позволяют вам объединять несколько посредников маршрутов одним удобным ключом и назначать на маршрут сразу несколько посредников. Например, это может пригодится при создании веб-интерфейса и API в одном приложении. Вы можете сгруппировать маршруты сессии и CSRF в группу %%'web'%%, а ограничитель скорости в группу %%'api'%%. На самом деле по умолчанию структура приложения в Laravel 5.2 использует именно такой подход. Например, в стандартном файле %%(t)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', ], ]; %% Теперь группа %%'web'%% может быть назначена на маршрут вот так: %% Route::group(['middleware' => ['web']], function () { // }); %% Но не забывайте, что группа посредников %%'web'%% **уже** применяется к вашим маршрутам по умолчанию, так как %%(t)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' ]); %% Более того, вы можете использовать символ %%(t)*%% при написании сообщений для проверки ввода в ваших языковых файлах, что позволяет использовать одно сообщение для полей ввода массивов: %% 'custom' => [ 'person.*.email' => [ 'unique' => 'Каждый пользователь должен иметь уникальный e-mail', ] ], %% == Правило проверки ввода Bail === Добавлено новое правило проверки ввода %%bail%%, оно останавливает валидатор после первой неудачной проверки по данному правилу. Например, вы можете отменить проверку значения на уникальность %%unique%%, если оно не прошло проверку на %%integer%%: %% $this->validate($request, [ 'user_id' => 'bail|integer|unique:users' ]); %% === Улучшения глобальных заготовок Eloquent === В предыдущих версиях Laravel глобальные заготовки Eloquent были сложными и приводили к появлению ошибок. Но в Laravel 5.2 глобальные заготовки запросов требуют от вас реализации только одного простого метода %%apply()%%. Подробнее о написании глобальных заготовок читайте в полной ((/docs/v5/eloquent#заготовки документации по Eloquent)). == Laravel 5.1.11 == В Laravel 5.1.11 добавлена поддержка ((/docs/v5/authorization авторизации)) прямо из коробки! Удобно организуйте логику авторизации ваше приложения при помощи простых обратных вызовов или классов политик, и авторизуйте действия при помощи простых и выразительных методов. Подробнее читайте в ((/docs/v5/authorization документации по авторизации)). == Laravel 5.1.4 == В Laravel 5.1.4 добавлена простая блокировка входа в приложение. Подробнее читайте в ((/docs/v5/authentication#блокировка документации по аутентификации)). == 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 === ((https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md Руководство по стилю программирования PSR-2)) принято стандартом для стиля разработки фреймворка Laravel. Вдобавок, все генераторы обновлены для генерирования PSR-2-совместимого синтаксиса. === Документация === Каждая страница документации Laravel тщательно отредактирована и значительно исправлена. Все примеры кода также пересмотрены и расширены для обеспечения большей релевантности и понимания контекста. === Вещание событий === Во многих современных веб-приложениях используются веб-сокеты для реализации живых интерфейсов пользователя, работающих в реальном времени. Когда на сервере обновляются какие-либо данные, по веб-сокет соединению отправляется сообщение для обработки клиентом. Чтобы помочь вам в создании приложений такого типа, Laravel позволяет легко "вещать" ваши события по веб-сокет соединению. Вещание ваших событий Laravel позволяет вам использовать одинаковые названия событий в вашем коде на стороне сервера и вашем JavaScript-фреймворке на стороне клиента. Подробнее о вещании событий читайте в ((/docs/v5/events#широковещательные_события документации событий)). === Параметры посредников === Теперь посредники могут принимать дополнительные параметры. Например, если в вашем приложении необходима проверка наличия у пользователя необходимой "роли" для выполнения данного действия, вы можете создать посредника %%(t)RoleMiddleware%%, который принимает название роли в качестве дополнительного аргумента: %% user()->hasRole($role)) { // Переадресация... } return $next($request); } } %% Параметры посредника можно указать при определении маршрута, разделив двоеточием название посредника и его параметры. Несколько параметров разделяются между собой запятыми: %% Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) { // }]); %% Подробнее о посредниках читайте в ((/docs/v5/middleware документации посредников)). === Пересмотр тестирования === Встроенные в Laravel возможности для тестирования были значительно улучшены. Набор новых методов обеспечивает гибкий и выразительный интерфейс для взаимодействия с вашим приложением и проверки его откликов. Например, взгляните на следующий тест: %% public function testNewUserRegistration() { $this->visit('/register') ->type('Taylor', 'name') ->check('terms') ->press('Register') ->seePageIs('/dashboard'); } %% Подробнее о тестировании читайте в ((/docs/v5/testing документации по тестированию)). === Фабрики моделей === Теперь Laravel содержит простой способ для создания заглушек Eloquent-моделей при помощи ((/docs/v5/database-testing#создание-фабрик фабрик моделей)). Фабрики моделей позволяют вам легко задать набор "стандартных" атрибутов для вашей Eloquent-модели, и затем сгенерировать экземпляры тестовой модели для ваших тестов и тестовые данные для БД. Также фабрики моделей содержат полезные возможности мощной PHP-библиотеки ((https://github.com/fzaninotto/Faker Faker)) для генерирования случайных данных: %% $factory->define(App\User::class, function ($faker) { return [ 'name' => $faker->name, 'email' => $faker->email, 'password' => str_random(10), 'remember_token' => str_random(10), ]; }); %% Подробнее о фабриках моделей читайте в ((/docs/v5/database-testing#создание-фабрик документации)). === Улучшения Artisan === Теперь Artisan-команды можно определить с помощью простой, маршруто-подобной "сигнатуры", которая обеспечивает чрезвычайно простой интерфейс для определения аргументов и параметров командной строки. Например, вы можете определить простую команду и её параметры таким образом: %% /** * Имя и сигнатура терминальной команды. * * @var string */ protected $signature = 'email:send {user} {--force}'; %% Подробнее об определении Artisan-команд читайте в ((/docs/v5/artisan документации Artisan)). === Структура папок === Для большего соответствия своему назначению папка %%(t)app/Commands%% переименована в %%(t)app/Jobs%%. Также папка %%(t)app/Handlers%% собрана в единую папку %%(t)app/Listeners%%, которая содержит слушатели событий. Однако, эти изменения не обязательны, и вам не требуется обновлять структуру папок для использования Laravel 5.1. === Шифрование === В предыдущих версиях Laravel за шифрование отвечало PHP-расширение %%(t)mcrypt%%. А теперь, начиная с Laravel 5.1, за шифрование отвечает расширение %%(t)openssl%%, которое развивается намного активнее. == Laravel 5.0 == В Laravel 5.0 введена новая структура приложения для проекта Laravel по умолчанию. Эта новая структура служит лучшей основой для построения надёжных приложений на Laravel, а также обеспечивает поддержку стандартов автозагрузки (PSR-4) для всего приложения. Для начала давайте рассмотрим некоторые основные новшества. === Новая структура папок === Старая папка %%(t)app/models%% была полностью удалена. Вместо этого весь ваш код теперь располагается прямо в папке %%(t)app%% и по умолчанию попадает в пространство имён %%(t)App%%. Это пространство имён по умолчанию можно быстро изменить с помощью новой Artisan-команды %%(sh)app:name%%. Контроллеры, посредники и запросы (новый тип классов в Laravel 5.0) теперь сгруппированы в папке %%(t)app/Http%%, так как все они связаны с транспортным уровнем HTTP вашего приложения. Вместо единого, длинного файла фильтров маршрутов теперь все посредники разбиты по своим отдельным файлам классов. Новая папка %%(t)app/Providers%% заменила файлы %%(t)app/start%% из предыдущей версии Laravel 4.x. Эти сервис-провайдеры предоставляют различные функции начальной загрузки для вашего приложения, такие как обработка ошибок, ведение журналов, загрузка маршрутов и т.д. Само собой, вы можете создавать дополнительные сервис-провайдеры для своего приложения. Языковые файлы приложения и шаблоны переместились в папку %%(t)resources%%. === Контракты === Все основные компоненты Laravel реализуют интерфейсы, расположенные в репозитории %%(t)illuminate/contracts%%. У репозитория нет внешних зависимостей. Наличие удобного, централизованного набора интерфейсов, который вы можете использовать для отвязки и внедрения зависимостей, может служить простой альтернативой для фасадов Laravel. Подробнее о контрактах читайте в ((/docs/v5/contracts полной документации)). === Кэширование маршрутов === Если ваше приложение полностью состоит из маршрутов контроллеров, вы можете использовать новую Artisan-команду %%(sh)route:cache%% для радикального ускорения регистрации ваших маршрутов. Это особенно полезно для приложений с числом маршрутов 100+. Эта часть вашего приложения получит **радикальное** ускорение. === Посредники маршрутов === Вдобавок к "фильтрам" маршрутов из Laravel 4 теперь в версии 5 поддерживаются HTTP-посредники, а встроенная авторизация и CSRF-"фильтры" преобразованы в посредников. Посредники предоставляют единый, цельный интерфейс для замены всех типов фильтров, позволяя вам легко проверять, и даже отклонять запросы до того, как они попадут в ваше приложение. Подробнее о посредниках читайте в ((/docs/v5/middleware полной документации)). === Внедрение методов контроллера === Вдобавок к существующему внедрению конструктора теперь вы можете указывать типы зависимостей в методах контроллера. ((/docs/v5/container Сервис-контейнер)) автоматически внедрит зависимости, даже если маршрут содержит другие параметры: %% public function createPost(Request $request, PostRepository $posts) { // } %% === Преднастроенная авторизация === Контроллеры регистрации, авторизации и сброса паролей пользователей теперь встроены сразу из коробки, а также соответствующие им простые шаблоны, расположенные в %%(t)resources/views/auth%%. Вдобавок миграция таблицы "users" была включена во фреймворк. Наличие этих простых ресурсов позволяет ускорить разработку идей для приложения, не увязая в создании шаблонной авторизации. Шаблоны авторизации доступны по маршрутам %%(t)auth/login%% и %%(t)auth/register%%. Сервис %%(t)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) { // } } %% Подробнее о работе с событиями читайте в ((/docs/v5/events полной документации)). === Команды / Очереди === Вдобавок к поддерживаемому в Laravel 4 формату очередей команд в Laravel 5 можно представлять ваши задачи для очереди как простые объекты команд. Эти команды живут в папке %%(t)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 использует новый типаж %%(t)DispatchesCommands%%, позволяя вам легко отправлять ваши команды на выполнение: %% $this->dispatch(new PurchasePodcastCommand($user, $podcast)); %% Конечно, вы можете использовать команды также и для команд, выполняющихся синхронно (не в очереди). На самом деле, использование команд - отличный способ инкапсулировать сложные задачи, которые необходимо выполнять вашему приложению. Более подробно об этом написано в ((/docs/v5/bus документации по командной шине)). === Очередь БД === Драйвер очереди %%(t)database%% теперь включён в Laravel - это простой, локальный драйвер очереди, не требующий установки дополнительных пакетов кроме ПО вашей БД. === Планировщик Laravel === Раньше разработчикам приходилось создавать Cron-задачи для каждой консольной команды, которую они хотели запланировать. Это утомительно. Для планирования консольных команд теперь не ведётся контроль версий, и для добавления Cron-задач вам необходимо подключаться к серверу по SSH. Давайте упростим нам жизнь. Планировщик команд Laravel позволяет вам гибко и выразительно задавать план команд в самом Laravel, а на сервере нужна только одна Cron-задача. Это выглядит так: %% $schedule->command('artisan:command')->dailyAt('15:00'); %% Чтобы узнать всё о планировщике, загляните в ((/docs/v5/artisan#планировщик полную документацию))! === Tinker / Psysh === Теперь команда %%(sh)php artisan tinker%% использует ((https://github.com/bobthecow/psysh Psysh)) от Джастина Хильмана, более надёжный REPL для PHP. Если вам нравился Boris в Laravel 4, то вы полюбите Psysh. И более того - он работает в Windows! Для начала просто попробуйте: %% php artisan tinker %% === DotEnv === Вместо множества сбивающих с толку, вложенных папок с настройками среды, Laravel 5 теперь использует ((https://github.com/vlucas/phpdotenv DotEnv)) от Ванса Лукаса. Эта библиотека предоставляет простой способ управления вашими настройками сред, и делает простым определение среды в Laravel 5.Подробнее читайте в ((/docs/v5/configuration#среда официальной документации)). === Laravel Elixir === Laravel Elixir от Джеффри Вэя предоставляет гибкий, выразительный интерфейс для компилирования и соединения ваших ресурсов. Если вы имели печальный опыт изучения Grunt или Gulp, то эти страшные времена позади. Elixir помогает начать пользоваться Gulp для компилирования ваших Less, Sass и CoffeeScript. Он может даже запустить ваши тесты для вас! Подробнее об Elixir читайте в ((/docs/v5/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. Начните за несколько минут! В ((/docs/v5/authentication#социальная полной документации)) есть все подробности. === Интеграция Flysystem === Теперь Laravel содержит мощную библиотеку для абстракции файловой системы ((https://github.com/thephpleague/flysystem Flysystem)), обеспечивающую безболезненную интеграцию с локальным хранилищем, облачными хранилищами Amazon S3 и Rackspace - всё в одном, едином и элегантном API! Хранить файлы в Amazon S3 теперь вот так просто: %% Storage::put('file.txt', 'contents'); %% Более подробно об интеграции Laravel Flysystem читайте в ((/docs/v5/filesystem полной документации)). === Запросы форм === В Laravel 5.0 введены **запросы форм**, которые наследуют класс %%(t)Illuminate\Foundation\Http\FormRequest%%. Эти объекты запросов могут быть совмещены с внедрением методов контроллера для обеспечения метода проверки ввода пользователей, без необходимости написания шаблонного кода. Давайте разберёмся подробнее и взглянем на пример %%FormRequest%%: %% 'required|email|unique:users', 'password' => 'required|confirmed|min:8', ]; } public function authorize() { return true; } } %% Когда класс определён, мы можем указать его тип в нашем действии контроллера: %% public function register(RegisterRequest $request) { var_dump($request->input()); } %% Когда сервис-контейнер Laravel определяет, что внедряемый им класс - это экземпляр %%(t) FormRequest%%, запрос **автоматически пройдёт проверку**. Это значит, что если вызвано действие вашего контроллера, то вы можете быть уверены, что ввод HTTP-запроса прошёл проверку по тем правилам, которые вы указали в классе запроса формы. Более того, если запрос некорректен, будет автоматически вызвана HTTP-переадресация, которую вы можете настроить, а сообщение об ошибке будет либо передано в сессию, либо преобразовано в JSON. **Проверка форм никогда не была настолько простой.** Подробнее о проверке %%(t)FormRequest%% читайте в ((/docs/v5/validation#формы документации)). === Простая проверка запроса контроллера === Базовый контроллер Laravel 5 теперь содержит типаж %%(t)ValidatesRequests%%. Этот типаж предоставляет простой метод %%validate%% для проверки входящих запросов. Если %%(t)FormRequests%% для вашего приложения избыточен, попробуйте это: %% public function createPost(Request $request) { $this->validate($request, [ 'title' => 'required|max:255', 'body' => 'required', ]); } %% Если проверка неудачна, будет выброшено исключение, и нужный HTTP-отклик будет автоматически возвращён в браузер. Ошибки при проверки будут переданы даже в сессию! Если запрос был AJAX-запросом, то Laravel даже позаботиться об отправке JSON-представления ошибок проверки обратно к вам. Подробнее об этом новом методе читайте в ((/docs/v5/validation#контроллер документации)). === Новые генераторы === В дополнение к новой структуре приложения по умолчанию в фреймворк были добавлены новые Artisan-команды генераторы. Для подробностей посмотрите %%(sh)php artisan list%%. === Кэш настроек === Теперь вы можете кэшировать все свои настройки в едином файле с помощью команды %%(sh)config:cache%%. === Symfony VarDumper === Популярная вспомогательная функция %%dd%%, которая сохраняет переменную отладочную информацию, была переведена на использование восхитительного Symfony VarDumper. Это обеспечивает цветовое выделение вывода и даже сворачивание массивов. Просто попробуйте сделать так в своём проекте: %% dd([1, 2, 3]); %% ((#Laravel4.2)) ==Laravel 4.2== Полный список изменений этой версии можно увидеть, выполнив команду %%(t)php artisan changes%% в установленной версии 4.2 или ((https://github.com/laravel/framework/blob/4.2/src/Illuminate/Foundation/changes.json==посмотреть в файле изменений на Github)). В это описание вошли только значительные улучшения и изменения данной версии. .(alert) **Примечание:** Во время разработки версии 4.2 многие небольшие исправления и улучшения были включены в различные подверсии Laravel 4.1. Поэтому не забудьте также ознакомиться со списком изменений Laravel 4.1! ===Требование PHP 5.4=== Laravel 4.2 требует PHP 5.4 или выше. Это обновлённое требование PHP позволяет нам использовать новые возможности PHP, такие как типажи, чтобы обеспечивать более выразительные интерфейсы для таких инструментов как ((docs/v4/billing==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 %%(t)app/config/database.php%% по умолчанию настроен на использование Forge, что обеспечивает более удобное развёртывание свежих приложений на платформе. Больше информации о Laravel Forge можно найти на ((https://forge.laravel.com/==официальном сайте 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 содержит простой конфигурационный файл %%(t)Homestead.yaml%% для управления несколькими приложениями Laravel в одной коробке. Сейчас по умолчанию установленный Laravel 4.2 содержит файл конфигурации %%(t)app/config/local/database.php%%, который настроен на использование базы данных Homestead, что делает начальную установку и настройку Laravel удобнее. В официальную документацию также была включена ((docs/v4/homestead==документация Homestead)). ===Laravel Cashier=== Laravel Cashier (кассир) - простая, удобная библиотека для управления подписками биллинга с помощью Stripe. Начиная с версии Laravel 4.2, мы добавили документацию по Cashier к основной документации Laravel, хотя установка самого компонента по-прежнему не обязательна. Эта версия Cashier содержит много исправлений, поддерживает множество валют и совместима с последним Stripe API. ===Обработчики очереди - демоны=== Команда Artisan %%(t)queue:work%% теперь поддерживает параметр %%(t)--daemon%% для запуска обработчика в "режиме демона", это значит, что обработчик будет продолжать выполнять работу без перезагрузки фреймворка. Это приводит к значительному снижению загрузки процессора за счёт несколько более сложного процесса развёртывания приложения. Больше информации о демонах - обработчиках очереди можно найти в ((docs/v4/queues#daemon-queue-worker==документации по очередям)). ===Драйверы Mail API=== В Laravel 4.2 вошли новые драйверы Mailgun и Mandrill API для функций %%Mail%%. Для многих приложений это обеспечивает более быстрый и надёжный способ отправки электронной почты, чем варианты SMTP. Новые драйверы используют HTTP библиотеку Guzzle 4. ===Мягко удаляемые типажи=== Более чистая архитектура для "мягких удалений" и других "глобальных областей" была добавлена в PHP 5.4 с помощью типажей. Эта новая архитектура позволяет проще создавать подобные глобальные типажи и чище разделять задачи внутри самого фреймворка. Больше информации о новых %%SoftDeletingTrait%% можно найти в ((docs/v4/eloquent#мягкое==документации Eloquent)). ===Удобная аутентификация и запоминаемые типажи=== Теперь Laravel 4.2 по-умолчанию использует простые типажи, содержащие необходимые свойства для пользовательских интерфейсов аутентификации и напоминания паролей. Это обеспечивает более чистый файл модели %%User%% по умолчанию. ==="Simple Paginate"=== В построитель запросов и Eloquent был добавлен метод %%simplePaginate%% (простое разбиение на страницы), который обеспечивает более эффективные запросы при использовании простых ссылок "Далее" и "Назад" в вашем постраничном представлении. ===Подтверждение миграций=== Теперь в работающих приложениях деструктивные операции миграций будут запрашивать подтверждение. Команды можно выполнять без дополнительных подтверждений, используя параметр %%(t)--force%%. ((#Laravel4.1)) == Laravel 4.1== ===Полный список изменений=== Полный список изменений для этой версии можно увидеть, выполнив команду %%php artisan changes%% в установленной версии 4.1 или ((https://github.com/laravel/framework/blob/4.1/src/Illuminate/Foundation/changes.json==посмотреть файл изменений на Github)). Это описание содержит только основные улучшения и изменения в версии. ===Новый компонент SSH=== В эту версию вошёл полностью новый компонент %%SSH%%. Эта функция позволяет вам легко подключаться через SSH к удалённым серверам и выполнять команды. Чтобы узнать больше, загляните в ((docs/v4/ssh==документацию компонента SSH)). Новая команда %%(t)php artisan tail%% использует новый компонент SSH. Чтобы узнать больше, загляните в ((docs/v4/ssh#tailing-remote-logs==документацию команды)) %%(t)tail%%. ===Boris в Tinker=== Теперь команда %%(t)php artisan tinker%% использует ((https://github.com/d11wtq/boris==Boris REPL)), если ваша система поддерживает его. Для использования этой возможности должны быть установлены расширения PHP %%(t)readline%% и %%(t)pcntl%%. Если у вас нет этих расширений, будет использована оболочка из 4.0. ===Улучшения Eloquent=== В Eloquent добавлено новое отношение %%hasManyThrough%%. Посмотрите, как им пользоваться, в ((docs/v4/eloquent#hmt==документации Eloquent)). Также был добавлен новый метод %%whereHas%% для возможности ((docs/v4/eloquent#querying-relations==получения моделей на основе ограничений отношений)). ===Подключения чтения/записи к БД=== Теперь автоматическая обработка отдельных подключений чтения/записи доступна во всём слое БД, в том числе в построителе запросов и Eloquent. Чтобы узнать больше, загляните в ((docs/v4/database#read-write-connections==документацию)). ===Приоритет очереди=== Теперь поддерживаются приоритеты очереди с помощью передачи в команду %%(t)queue:listen%% списка, разделённого запятыми. ===Обработка неудавшихся заданий очереди=== Теперь в очередях есть возможность автоматической обработки неудавшихся заданий при использовании нового переключателя %%(t)--tries%% в %%(t)queue:listen%%. Больше информации об обработке неудавшихся заданий можно найти в ((docs/v4/queues#failed-jobs==документации очередей)). ===Тэги кэша=== "Секции" кэша были заменены "тэгами". Тэги кэша позволяют назначать несколько "тэгов" элементу кэша и получать элементы по тэгу. Больше информации об использовании тэгов кэша можно найти в ((docs/v4/cache#теги==документации кэша)). ===Гибкие напоминатели паролей=== Движок напоминателя паролей был изменён для обеспечения большей гибкости разработки при проверке паролей, выводе сообщений о состоянии в сессии, и т.д. Чтобы узнать больше об использовании расширенного движка напоминателя паролей, загляните в ((docs/v4/security#сброс_и_изменение==документацию)). ===Улучшенный движок путей=== В Laravel 4.1 вошёл полностью переписанный слой путей. API прежний, но регистрация путей на все 100% быстрее по сравнению с 4.0. Весь движок был значительно упрощён, и зависимость от Symfony Routing была минимизирована до составления выражений для путей. ===Улучшенный движок сессий=== Также в версию вошёл полностью новый движок сессий. Также как и улучшения путей, новый слой сессий проще и быстрее. Мы больше не используем средства обработки сессий Symfony(а значит и PHP), а используем своё решение, которое проще и легче в обслуживании. ===Doctrine DBAL=== Если вы используете функцию %%renameColumn%% в ваших миграциях, то вам надо будет добавить зависимость %%(t)doctrine/dbal%% в ваш файл %%(t)composer.json%%. Этот пакет больше не входит в Laravel по умолчанию.