релиз 8 версии laravel
Laravel 8 будет включать в себя несколько приятных новых дополнений, включая улучшенный режим обслуживания, а также еще несколько более крупных функций, которые еще не были объявлены
Laravel 8 теперь выпущен и включает в себя множество новых функций, включая Laravel Jetstream, каталог моделей, классы фабрики моделей, сжатие миграции, улучшения, ограничивающие скорость, помощники по тестированию времени, динамические компоненты лезвий и многие другие функции.
Начиная с Laravel 6, фреймворк перешел на семантическое управление версиями и следует назначенному процессу выпуска. Это означает, что каждые 6 месяцев выпускается новый выпуск с первым номером (6.0, 7.0, 8.0 и т.д.), а между ними - выпуски исправлений.
Возможность тестирования views и компоненты Blade по отдельности ( #31378 и #32601 )
Laravel Jetstream улучшает существующий Laravel UI. Он обеспечивает отправную точку для новых проектов, включая вход в систему, регистрацию, проверку электронной почты, двухфакторную аутентификацию, управление сеансами, поддержку API через Laravel и управление командой.
Скелет приложения Laravel 8 включает папку app/Models. Все команды генератора предполагают, что модели существуют в app/Models; однако, если этот каталог не существует, структура будет считать, что приложение хранит модели в app/.
Начиная с Laravel 8, теперь, фабрики моделей Eloquent основаны на классах, с улучшенной поддержкой отношений между фабриками (т.е. у пользователя много постов). Думаю, вы согласитесь, насколько хорош новый синтаксис для создания записей с помощью новых и улучшенных фабрик моделей:
use App\Models\User;
User::factory()->count(50)->create();
// using a model state "suspended" defined within the factory class
User::factory()->count(5)->suspended()->create();
Если ваше приложение содержит много файлов миграции, теперь вы можете сжать их в один файл SQL. Этот файл будет выполняться первым при запуске миграции, а затем все оставшиеся файлы миграции, которые не являются частью файла сжатой схемы. Сжатие существующих миграций может уменьшить количество файлов миграции и, возможно, повысить производительность при выполнении тестов.
Laravel 8 вносит улучшения в существующие функции ограничения скорости, поддерживая обратную совместимость с существующим throttle middleware и предлагая гораздо большую гибкость. В Laravel 8 есть концепция ограничителей скорости, которые вы можете определить через фасад:
use Illuminate\Support\Facades\RateLimiter;
RateLimiter::for('global', function (Request $request) {
return Limit::perMinute(1000);
});
Как видите метод for() принимает экземпляр HTTP-запроса, что дает вам полный контроль над динамическим ограничением запросов.
Пользователи Laravel получили полный контроль над изменением времени с помощью превосходной библиотеки Carbon PHP. Laravel 8 делает еще один шаг вперед, предоставляя удобные помощники по тестированию для управления временем внутри тестов:
// Travel into the future...
$this->travel(5)->milliseconds();
$this->travel(5)->seconds();
$this->travel(5)->minutes();
$this->travel(5)->hours();
$this->travel(5)->days();
$this->travel(5)->weeks();
$this->travel(5)->years();
// Travel into the past...
$this->travel(-5)->hours();
// Travel to an exact time...
$this->travelTo(now()->subHours(6));
// Return back to the present time...
$this->travelBack();
При использовании этих методов время будет сбрасываться между каждым тестом.
Иногда вам нужно динамически визуализировать blade-компонент во время выполнения. Laravel 8 предоставляет компонент для рендеринга <x-dynamic-component/>:
<x-dynamic-component :component="$componentName" class="mt-4" />
Функция пакетной обработки заданий Laravel позволяет вам легко выполнять пакет заданий, а затем выполнять некоторые действия, когда пакет заданий завершился.
Новый метод фасада Bus batch() может использоваться для отправки пакета заданий. Конечно, пакетирование в первую очередь полезно в сочетании с обратными вызовами завершения. Таким образом, вы можете использовать методы then, catch и finally для определения завершения обратного вызова для партии. Каждый из этих обратных вызовов получит экземпляр при вызове: Illuminate\Bus\Batch
use App\Jobs\ProcessPodcast;
use App\Podcast;
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Batch;
use Throwable;
$batch = Bus::batch([
new ProcessPodcast(Podcast::find(1)),
new ProcessPodcast(Podcast::find(2)),
new ProcessPodcast(Podcast::find(3)),
new ProcessPodcast(Podcast::find(4)),
new ProcessPodcast(Podcast::find(5)),
])->then(function (Batch $batch) {
// All jobs completed successfully...
})->catch(function (Batch $batch, Throwable $e) {
// First batch job failure detected...
})->finally(function (Batch $batch) {
// The batch has finished executing...
})->dispatch();
return $batch->id;
В предыдущих выпусках Laravel php artisan down функцию режима обслуживания можно было обойти с помощью «разрешенного списка» IP-адресов, которым был разрешен доступ к приложению. Эта функция была удалена в пользу более простого решения «secret»/token.
Находясь в режиме обслуживания, вы можете использовать опцию secret для указания токена обхода режима обслуживания:
php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"
После перевода приложения в режим обслуживания вы можете перейти к URL-адресу приложения, соответствующему этому токену, и Laravel выдаст вашему браузеру файл cookie обхода режима обслуживания:
https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515
Используя новый метод catch, теперь вы можете предоставить замыкание, которое должно быть выполнено, если замыкание в очереди не может быть успешно завершено после исчерпания всех настроенных попыток повтора вашей очереди:
use Throwable;
dispatch(function () use ($podcast) {
$podcast->publish();
})->catch(function (Throwable $e) {
// This job has failed...
});
Слушатели событий, основанные на замыкании, теперь могут быть зарегистрированы только путем передачи замыкания в метод. Laravel проверит замыкание, чтобы определить, какой тип события обрабатывает слушатель:Event::listen
use App\Events\PodcastProcessed;
use Illuminate\Support\Facades\Event;
Event::listen(function (PodcastProcessed $event) {
//
});
Кроме того, прослушиватели событий на основе замыкания теперь могут быть помечены как стоящие в очереди с помощью функции:Illuminate\Events\queueable
use App\Events\PodcastProcessed;
use function Illuminate\Events\queueable;
use Illuminate\Support\Facades\Event;
Event::listen(queueable(function (PodcastProcessed $event) {
//
}));
Как очереди заданий, вы можете использовать методы onConnection, onQueue и delay , чтобы настроить выполнение очереди слушателя:
Event::listen(queueable(function (PodcastProcessed $event) {
//
})->onConnection('redis')->onQueue('podcasts')->delay(now()->addSeconds(10)));
Если вы хотите обрабатывать сбои анонимного прослушивателя в очереди, вы можете предоставить закрытие метода catch при определении прослушивателя queueable:
use App\Events\PodcastProcessed;
use function Illuminate\Events\queueable;
use Illuminate\Support\Facades\Event;
use Throwable;
Event::listen(queueable(function (PodcastProcessed $event) {
//
})->catch(function (PodcastProcessed $event, Throwable $e) {
// The queued listener failed...
}));
В команду Artisan serve добавлена автоматическая перезагрузка при обнаружении изменений переменных среды в вашем локальном .env файле. Раньше команду приходилось останавливать и перезапускать вручную.
В предыдущих выпусках Laravel объект RouteServiceProvider содержал свойство $namespace. Значение этого свойства будет автоматически добавляться к определениям маршрута контроллера и вызовам action вспомогательного метода. В Laravel 8.x это свойство по умолчанию. Это означает, что Laravel не будет выполнять автоматический префикс пространства имен. Следовательно, в новых приложениях Laravel 8.x определения маршрутов контроллера должны быть определены с использованием стандартного синтаксиса вызываемого PHP:URL::action null
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
Вызов action связанных методов должен использовать тот же синтаксис вызова:
action([UserController::class, 'index']);
return Redirect::action([UserController::class, 'index']);
Если вы предпочитаете префикс маршрута контроллера в стиле Laravel 7.x, вы можете просто добавить свойство $namespace в свое приложение RouteServiceProvider.
Веб-разработчик со стажем программирования более 13 лет, постоянно учусь, люблю делать новые проекты.