1. HTTP Перенаправления

Присоединяйся к нашему Telegram сообществу @webblend!

Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.

Создание перенаправлений

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

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

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

Route::post('/user/profile', function () {
// Проверка запроса...
 
return back()->withInput();
});

Перенаправление на именованные маршруты

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

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

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

// Для маршрута с URI: profile/{id}
 
return redirect()->route('profile', ['id' => 1]);

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

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

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

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

// Для маршрута с URI: profile/{id}
 
return redirect()->route('profile', [$user]);

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

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

Перенаправление на действия контроллеров

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

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 () {
// Обновить профиль пользователя...
 
return redirect('/dashboard')->with('status', 'Profile updated!');
});

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

return back()->withInput();

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

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