РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1359 of 1392 menu

Метод handle

Метод handle является основным методом класса задачи (Job) в Laravel. Он вызывается автоматически, когда очередь извлекает задачу для обработки. В этом методе содержится бизнес-логика, которая должна быть выполнена. Метод принимает зависимости через внедрение (dependency injection), что позволяет легко использовать сервисы и репозитории.

Синтаксис

<?php class ExampleJob implements ShouldQueue { public function handle(): void { // Business logic here } } ?>

Метод handle может принимать произвольное количество параметров, которые автоматически разрешаются через контейнер Laravel. Это позволяет внедрять любые сервисы, необходимые для выполнения задачи.

Пример

Давайте создадим задачу, которая отправляет приветственное письмо новому пользователю после регистрации:

<?php namespace App\Jobs; use App\Models\User; use App\Mail\WelcomeMail; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\Mail; class SendWelcomeEmail implements ShouldQueue { protected $user; public function __construct(User $user) { $this->user = $user; } public function handle(): void { Mail::to($this->user->email) ->send(new WelcomeMail($this->user)); } } ?>

Результат выполнения кода:

"Welcome email sent to user@example.com"

Пример

Рассмотрим задачу, которая обрабатывает данные с использованием внедрения зависимостей через метод handle:

<?php namespace App\Jobs; use App\Services\ReportService; use App\Models\Report; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\Log; class ProcessReport implements ShouldQueue { protected $reportId; public function __construct(int $reportId) { $this->reportId = $reportId; } public function handle(ReportService $service): void { $report = Report::find($this->reportId); if (!$report) { Log::warning('Report not found', ['id' => $this->reportId]); return; } $processedData = $service->process($report); $report->update([ 'processed' => true, 'processed_at' => now(), 'result' => $processedData ]); Log::info('Report processed successfully', ['id' => $this->reportId]); } } ?>

Результат выполнения кода:

"Report processed successfully"

Пример

Продемонстрируем задачу с обработкой исключений и повторными попытками. Метод handle может выбрасывать исключения, которые будут обработаны системой очередей:

<?php namespace App\Jobs; use App\Models\Order; use App\Services\PaymentService; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\Log; use RuntimeException; class ProcessPayment implements ShouldQueue { public $tries = 3; public $backoff = [5, 10, 30]; protected $orderId; public function __construct(int $orderId) { $this->orderId = $orderId; } public function handle(PaymentService $paymentService): void { $order = Order::with('user')->find($this->orderId); if (!$order) { throw new RuntimeException('Order not found'); } if ($order->status !== 'pending') { Log::warning('Order already processed', ['id' => $this->orderId]); return; } $result = $paymentService->process($order); if (!$result['success']) { throw new RuntimeException('Payment failed: ' . $result['message']); } $order->update([ 'status' => 'paid', 'paid_at' => now(), 'transaction_id' => $result['transaction_id'] ]); Log::info('Payment processed', ['order' => $this->orderId]); } } ?>

Результат выполнения кода при успешной обработке:

"Payment processed"

Результат выполнения кода при ошибке:

"Payment failed: Insufficient funds"

Смотрите также

  • метод failed,
    который вызывается при неудачной обработке задачи
  • метод middleware,
    который определяет посредников для задачи
  • атрибут tries,
    который задаёт количество попыток выполнения задачи
  • атрибут backoff,
    который определяет задержки между повторными попытками
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить