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

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

Вы просматриваете документ для прошлой версии.
Рассмотрите возможность обновления вашего проекта до актуальной версии 11.x. Почему это важно?

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

Переадресация является экземпляром класса 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]);

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

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

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

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

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

/**
 * Получить значение ключа маршрута модели.
 *
 * @return mixed
 */
public function getRouteKey()
{
    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