Любите загадки? Событие еще доступно на сайте.
Ищете работу? Мы поможем!
Ищете работу? Мы поможем!

HTTP переадресация

Создание переадресации

Переадресация является экземпляром класса Illuminate\Http\RedirectResponse и содержит в ответе правильные заголовки, необходимые для перенаправления пользователя на другой URL. Есть несколько способов сгенерировать экземпляр RedirectResponse. Самый простой способ — использовать глобальный помощник redirect:

Route::get('/dashboard', function () {
    return redirect('/home/dashboard');
});

Иногда необходимо перенаправить пользователя в его предыдущее местоположение, например, когда отправленная форма недействительна. Это можно сделать с помощью глобальной вспомогательной функции back. Поскольку эта функция использует сессии, убедитесь, что маршрут, вызывающий функцию back, использует группу посредников web или применяет все необходимые посредники сессии:

Route::post('/user/profile', function () {
    // Validate the request...

    return back()->withInput();
});

Переадресация на именованные маршруты

Когда вы вызываете помощник redirect без параметров, возвращается экземпляр Illuminate\Routing\Redirector, что позволяет вам вызывать любой метод в экземпляре Redirector. Например, чтобы сгенерировать RedirectResponse на именованный маршрут, вы можете использовать метод route:

return redirect()->route('login');

Если ваш маршрут имеет параметры, вы можете передать их в качестве второго аргумента методу route:

// For a route with the following URI: profile/{id}

return redirect()->route('profile', ['id' => 1]);

Для удобства Laravel также предлагает глобальную функцию to_route:

return to_route('profile', ['id' => 1]);

Передача параметров через модели Eloquent

Если вы перенаправляете на маршрут с параметром “ID”, который заполняется из модели Eloquent, вы можете передать саму модель. ID будет извлечен автоматически:

// For a route with the following URI: profile/{id}

return redirect()->route('profile', [$user]);

Если вы хотите настроить значение, которое помещается в параметр маршрута, вы должны переопределить метод getRouteKey в вашей модели Eloquent:

/**
 * Получить значение ключа маршрута модели.
 */
public function getRouteKey(): mixed
{
    return $this->slug;
}

Перенаправление на методы контроллера

Вы также можете обеспечить перенаправления на методы контроллера. Для этого передайте имя контроллера и его метода методу action экземпляра redirect:

use App\Http\Controllers\HomeController;

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

Если метод контроллера требует параметров, вы можете передать их в качестве второго аргумента методу action:

return redirect()->action(
    [UserController::class, 'profile'], ['id' => 1]
);

Перенаправление с данными сеанса

Перенаправление на новый URL-адрес и передача данных в сеанс обычно выполняются одновременно. Обычно это делается после успешного выполнения действия, когда вы отправляете сообщение об успешном завершении сеанса. Для удобства вы можете создать экземпляр RedirectResponse и передать данные в сеанс в цепочке методов:

Route::post('/user/profile', function () {
    // Update the user's profile...

    return redirect('/dashboard')->with('status', 'Profile updated!');
});

Вы можете использовать метод withInput, предоставляемый экземпляром RedirectResponse, для передачи входных данных текущего запроса в сеанс перед перенаправлением пользователя на новый URL. После того как данные были переданы в сеанс, вы можете легко получить их во время следующего запроса:

return back()->withInput();

После перенаправления вы можете отобразить всплывающее сообщение сеанса. Например, используя синтаксис Blade:

@if (session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
@endif