Laravel — очереди и политики
Laravel — очереди и политики
Две темы, без которых production-приложение на Laravel редко обходится: очереди (долгие задачи вне HTTP-запроса) и политики (кто может что делать с моделью).
Старт проекта: Первая программа на Laravel. Тесты очередей: PHPUnit.
Зачем очереди
Отправка письма, генерация PDF, вызов внешнего API не должны блокировать ответ пользователю. Job кладётся в очередь; worker обрабатывает её в фоне.
Job
php artisan make:job SendWelcomeEmail
app/Jobs/SendWelcomeEmail.php:
<?php
namespace App\Jobs;
use App\Models\User;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Support\Facades\Mail;
class SendWelcomeEmail implements ShouldQueue
{
use Queueable;
public function __construct(public User $user) {}
public function handle(): void
{
Mail::raw(
"Добро пожаловать, {$this->user->name}",
fn ($m) => $m->to($this->user->email)->subject('Регистрация')
);
}
}
Постановка в очередь:
SendWelcomeEmail::dispatch($user);
// или с задержкой:
SendWelcomeEmail::dispatch($user)->delay(now()->addMinutes(5));
Драйвер и worker
.env для разработки:
QUEUE_CONNECTION=database
php artisan queue:table
php artisan migrate
php artisan queue:work
Для production часто Redis + Laravel Horizon (дашборд и балансировка workers).
Тест
use App\Jobs\SendWelcomeEmail;
use Illuminate\Support\Facades\Queue;
Queue::fake();
// ... действие, которое диспатчит job
Queue::assertPushed(SendWelcomeEmail::class);
Политики (Policies)
Правила доступа к модели, например «редактировать пост может только автор».
php artisan make:policy PostPolicy --model=Post
app/Policies/PostPolicy.php:
<?php
namespace App\Policies;
use App\Models\Post;
use App\Models\User;
class PostPolicy
{
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
public function delete(User $user, Post $post): bool
{
return $user->id === $post->user_id || $user->is_admin;
}
}
Контроллер:
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
$post->update($request->validated());
return redirect()->route('posts.show', $post);
}
Blade:
@can('update', $post)
<a href="{{ route('posts.edit', $post) }}">Редактировать</a>
@endcan
Gates (разовые проверки)
app/Providers/AppServiceProvider.php:
use Illuminate\Support\Facades\Gate;
public function boot(): void
{
Gate::define('admin-panel', fn ($user) => $user->is_admin);
}
if (Gate::allows('admin-panel')) { /* ... */ }
Policies предпочтительнее для CRUD вокруг модели; Gates — для глобальных флагов.
Middleware vs Policy
| Middleware | Policy | |
|---|---|---|
| Уровень | Маршрут («залогинен?») | Действие над объектом («это его пост?») |
| Пример | auth, verified | update, delete |
Связанные материалы
- Laravel
- Symfony Messenger — аналог очередей в Symfony
- Экосистема PHP
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). PHP как язык веб-разработки - роль серверного исполнения, базовый синтаксис и место в современном стеке. Экосистема PHP-приложений - фреймворки, инструменты, пакеты и типовые архитектурные подходы веб-разработки. Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Модель исполнения PHP - жизненный цикл запроса, серверный контекст и экосистема популярных CMS. История PHP - эволюция языка от простых скриптов до зрелой платформы серверной веб-разработки. Composer в PHP - управление зависимостями, автозагрузка классов и воспроизводимая сборка проектов. Параметр opcache.fast_shutdown ускоряет завершение работы скрипта за счёт пропуска стандартной процедуры освобождения памяти. Вместо этого используется механизм сборщика мусора операционной системы. Локальная среда разработки на PHP - настройка стека, запуск приложения и отладка без продакшен-сервера. Набор советов, правил, принципов и обычаев в разработке на этом языке. Фреймворки и библиотеки PHP - организация сервисов, вспомогательные компоненты и ускорение разработки веб-приложений. Гайд по установке и настройке с написанием первой программы и её запуском. Примеры простых и полезных консольных приложений с демонстрацией концепций языка.PHP - язык веб-разработки
Экосистема PHP-приложений
Что требуется знать перед началом изучения языка программирования PHP
Модель исполнения PHP
История языка PHP
Composer - управление зависимостями в PHP
Настройка веб-сервера для работы с PHP
Локальная среда разработки на PHP
Рекомендации по разработке на PHP
Фреймворки и библиотеки PHP
Первая программа на PHP
Простые приложения на PHP