Маршруты
Маршрут связывает адрес и HTTP-метод с кодом, который формирует ответ. Маршруты веб-страниц описываются в файле routes/web.php.
Простой маршрут
use Illuminate\Support\Facades\Route;
Route::get('/hello', function () {
return 'Привет!';
});Теперь по адресу /hello сайт вернёт строку «Привет!».
HTTP-методы
У каждого метода запроса свой метод маршрута. Один адрес может по-разному отвечать на разные методы:
Route::get('/posts', fn () => 'Список статей');
Route::post('/posts', fn () => 'Статья создана');
Route::put('/posts/{id}', fn (string $id) => "Статья $id изменена");
Route::delete('/posts/{id}', fn (string $id) => "Статья $id удалена");GET используют для чтения страниц, остальные — для изменения данных.
Параметры
Часть адреса в фигурных скобках попадает в аргумент функции:
Route::get('/users/{id}', function (string $id) {
return "Пользователь $id";
});Необязательный параметр помечается знаком вопроса и получает значение по умолчанию:
Route::get('/posts/{page?}', function (int $page = 1) {
return "Страница $page";
});Ограничения параметров
Чтобы маршрут срабатывал только для подходящих значений, параметру задают правило:
Route::get('/users/{id}', function (string $id) {
return "Пользователь $id";
})->whereNumber('id');Адрес /users/15 подойдёт, а /users/anna вернёт ошибку 404.
Именованные маршруты
Имя позволяет ссылаться на маршрут, не повторяя адрес:
Route::get('/profile', fn () => 'Профиль')->name('profile');
$url = route('profile'); // http://localhost:8000/profileЕсли адрес изменится, ссылки по имени продолжат работать.
Группы
Общую часть адреса выносят в группу:
Route::prefix('admin')->group(function () {
Route::get('/users', fn () => 'Пользователи'); // /admin/users
Route::get('/posts', fn () => 'Статьи'); // /admin/posts
});Список всех маршрутов проекта показывает команда php artisan route:list.
Частая ошибка
Laravel проверяет маршруты сверху вниз и берёт первый подходящий. Маршрут с параметром, стоящий выше, перехватит и конкретный адрес:
// Неправильно: /posts/create попадёт в первый маршрут как id = "create".
Route::get('/posts/{id}', fn (string $id) => "Статья $id");
Route::get('/posts/create', fn () => 'Новая статья');Ставьте конкретные адреса выше маршрутов с параметрами.