Урок 2: Основы маршрутизации в Laravel

На втором уроке мы погрузимся в одну из ключевых тем Laravel, это маршрутизацию. Если вы только начинаете свой путь в веб-разработке, не переживайте, я постараюсь объяснить всё максимально просто, с примерами и практическими задачами. В этом уроке вы узнаете, как управлять URL-адресами вашего приложения, создавать роуты разных типов, работать с параметрами и даже использовать именованные маршруты.

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

Роуты (маршруты) это «навигационная карта» вашего приложения. Они определяют, какой код должен выполняться при обращении к определённому URL. Например:

  • Когда пользователь заходит на ваш-сайт.ru/about, Laravel смотрит в файл routes/web.php и ищет маршрут, связанный с /about.
  • Найдя его, фреймворк выполняет привязанную к нему логику: например, возвращает представление (view) или вызывает контроллер.

Зачем это нужно?

  1. Чистая структура URL. Вы можете создавать понятные и SEO-дружественные адреса.
  2. Разделение логики. Роуты помогают организовать код, отделяя обработчики запросов от их определения.
  3. Гибкость. Можно легко менять логику для определённого URL без переписывания всего приложения.

Создание GET, POST, PUT, DELETE-роутов

В Laravel маршруты определяются в файлах routes/web.php (для веб-интерфейса) и routes/api.php (для API). Мы начнём с web.php.

GET-роуты

Самый простой тип маршрута это GET. Он используется для отображения страниц.

// routes/web.php
Route::get('/about', function () {
    return 'Страница "О нас"';
});

Теперь при переходе на /about пользователь увидит текст «Страница ‘О нас'».

POST, PUT, DELETE-роуты

Эти методы используются для отправки данных на сервер (например, форм) или изменения ресурсов.

// Отправка формы
Route::post('/contact', function () {
    // Обработка данных формы
});

// Обновление записи
Route::put('/user/{id}', function ($id) {
    // Обновляем пользователя с ID = $id
});

// Удаление записи
Route::delete('/user/{id}', function ($id) {
    // Удаляем пользователя с ID = $id
});

Важно!

  • Для работы с POST, PUT, DELETE в HTML-формах нужно использовать метод POST с указанием реального метода через @method:
<form action="/user/1" method="POST">
    @method('DELETE')
    @csrf
    <button>Удалить пользователя</button>
</form>

Параметры в роутах и их валидация

Часто в URL нужно передавать динамические данные, например ID пользователя. Для этого используются параметры роутов.

Базовые параметры

Route::get('/user/{id}', function ($id) {
    return "Пользователь с ID: $id";
});

Теперь при переходе на /user/5 вы увидите: «Пользователь с ID: 5».

Необязательные параметры

Если параметр не обязателен, добавьте знак ?:

Route::get('/posts/{category?}', function ($category = 'all') {
    return "Категория: $category";
});
  • /posts → «Категория: all»
  • /posts/laravel → «Категория: laravel»

Валидация параметров

Чтобы ограничить формат параметров, используйте регулярные выражения или метод where():

// Только цифры для ID
Route::get('/user/{id}', function ($id) {
    // ...
})->where('id', '[0-9]+');

// Или несколько параметров
Route::get('/post/{year}/{month}', function ($year, $month) {
    // ...
})->where(['year' => '[0-9]{4}', 'month' => '[0-9]{2}']);

Пример с ошибкой валидации:
Если пользователь введёт /user/abc, Laravel вернёт ошибку 404, так как abc не соответствует регулярному выражению [0-9]+.

Именованные роуты и их использование

Именованные маршруты позволяют ссылаться на роуты по их имени, а не по URL. Это упрощает поддержку кода: если URL изменится, вам не придётся править его во всех шаблонах.

Как создать именованный роут

Добавьте метод name():

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

Как использовать имя роута

  1. В шаблонах Blade:
<a href="{{ route('contact.page') }}">Контакты</a>
  1. В контроллерах или коде:
return redirect()->route('contact.page');

Пример с параметрами:

Route::get('/user/{id}/profile', function ($id) {
    // ...
})->name('user.profile');

// Генерация URL
route('user.profile', ['id' => 5]); // /user/5/profile

Практические задачи

Закрепим материал на примерах.

Задача 1: Создать маршрут для страницы блога

  • URL: /blog
  • Возвращает текст «Последние статьи».
  • Сделать именованный роут blog.index.

Решение:

Route::get('/blog', function () {
    return 'Последние статьи';
})->name('blog.index');

Задача 2: Динамический маршрут для постов

  • URL: /post/{id}
  • Валидировать id как число.
  • Возвращать «Пост №{id}».

Решение:

Route::get('/post/{id}', function ($id) {
    return "Пост №$id";
})->where('id', '[0-9]+');

Задача 3: Форма для удаления пользователя

Создайте форму, которая отправляет DELETE-запрос на /user/1 и использует именованный роут user.delete.

Решение:

// routes/web.php
Route::delete('/user/{id}', function ($id) {
    // Удаление пользователя
})->name('user.delete');
<!-- В шаблоне -->
<form action="{{ route('user.delete', ['id' => 1]) }}" method="POST">
    @method('DELETE')
    @csrf
    <button>Удалить</button>
</form>

Советы

  1. Группируйте роуты. Если у вас много маршрутов с общими префиксами или middleware, используйте Route::group().
  2. Используйте ресурсные роуты. Для CRUD-операций (создание, чтение, обновление, удаление) удобно применять Route::resource().
  3. Проверяйте существующие роуты. Команда php artisan route:list выведет все зарегистрированные маршруты.

В следующем уроке мы разберём контроллеры, которые хранят логику вашего приложения. Вы научитесь переносить код из анонимных функций в контроллеры, работать с методами и зависимостями.

Хотите продолжить обучение? Переходите к полному курсу — курс по Laravel для начинающих