Переспрямування до дій контролера в Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 14 січня, 2025
При створенні веб-додатків перенаправлення користувачів між різними частинами є звичайною вимогою. Досліджте, як метод `action()` у Laravel може спростити управління редиректами, забезпечуючи безпеку типів і зменшуючи ймовірність помилок при зміні імен маршрутів

При створенні веб-додатків часто виникає потреба переводити користувачів між різними частинами вашого застосунку. Laravel надає кілька способів для обробки редиректів (наприклад, через іменовані маршрути з використанням route()->name()), проте метод action() пропонує альтернативний підхід, орієнтуючись на дії контролерів і надаючи унікальні переваги в певних випадках.

Чому варто розглянути редиректи з використанням action?

return redirect()->action([UserController::class, 'index']);

Розгляньмо практичний приклад у системі управління курсами:

<?php

namespace App\Http\Controllers;

use App\Models\Course;
use Illuminate\Http\Request;
use App\Http\Controllers\StudentController;
use App\Http\Controllers\CourseController;

class EnrollmentController extends Controller
{
    public function processEnrollment(Request $request, Course $course)
    {
        try {
            // Спроба запису на курс
            $enrollment = $course->enrollStudent(
                $request->user(),
                $request->payment_method
            );
  
            if ($request->has('return_to_dashboard')) {
                return redirect()
                    ->action([StudentController::class, 'dashboard'])
                    ->with('success', 'Ви успішно зареєструвались на курс!');
            }
  
            return redirect()
                ->action(
                    [CourseController::class, 'show'],
                    ['course' => $course->id]
                )
                ->with('success', 'Ви успішно зареєструвались! Тепер у вас є доступ до матеріалів курсу.');
        } catch (EnrollmentException $e) {
            return redirect()
                ->action([CourseController::class, 'index'])
                ->with('error', 'Запис не вдався: ' . $e->getMessage());
        }
    }
}

Метод action() пропонує надійний спосіб обробки редиректів у вашому Laravel-додатку, забезпечуючи зручність підтримки вашої логіки редиректів у міру зростання проекту