Урок 03

Роуты

Что такое роут

Роут (маршрут) — это правило, которое сопоставляет URL и HTTP-метод с кодом, который должен выполниться. Когда пользователь открывает /posts, Laravel ищет в таблице маршрутов запись для GET /posts и вызывает связанный обработчик.

Роуты регистрируются в файлах routes/web.php (для браузера) и routes/api.php (для API).

Простой роут

use Illuminate\Support\Facades\Route;

Route::get('/hello', function () {
    return 'Hello, world!';
});

Здесь Route::get создаёт правило: если пришёл GET-запрос на /hello, вернуть строку.

HTTP-методы

HTTP определяет методы, каждый из которых означает тип действия:

  • GET — получить данные
  • POST — создать
  • PUT — обновить целиком
  • PATCH — обновить частично
  • DELETE — удалить

В Laravel каждому методу соответствует свой статический метод:

Route::get('/posts', fn () => 'Список');
Route::post('/posts', fn () => 'Создание');
Route::put('/posts/{id}', fn ($id) => "Обновление {$id}");
Route::delete('/posts/{id}', fn ($id) => "Удаление {$id}");

Параметры роута

Параметры объявляются в фигурных скобках. Значение из URL попадает в аргумент функции:

Route::get('/user/{id}', function (string $id) {
    return "User ID: {$id}";
});

Необязательный параметр помечается ? и получает значение по умолчанию:

Route::get('/user/{name?}', function (string $name = 'Guest') {
    return "Hello, {$name}";
});

Ограничения параметров

Метод where задаёт регулярное выражение, которому должен соответствовать параметр:

Route::get('/user/{id}', function ($id) {
    return $id;
})->where('id', '[0-9]+');

Если URL не соответствует шаблону — возвращается 404.

Именованные роуты

Роуту можно дать имя. Это удобно, когда нужно сгенерировать URL в коде:

Route::get('/dashboard', function () {
    return view('dashboard');
})->name('dashboard');

$url = route('dashboard');

Группы роутов

Группа позволяет применить общие настройки к нескольким роутам:

Route::prefix('admin')->group(function () {
    Route::get('/users', fn () => 'Users');
    Route::get('/posts', fn () => 'Posts');
});

Здесь оба роута получат префикс /admin.

Группировать можно и по middleware:

Route::middleware(['auth'])->group(function () {
    Route::get('/profile', fn () => 'Profile');
});

Все роуты внутри группы будут требовать аутентификации.

Просмотр роутов

php artisan route:list

Команда выводит таблицу всех зарегистрированных маршрутов с методами, URL, именами и привязанными действиями.