На втором уроке мы погрузимся в одну из ключевых тем Laravel, это маршрутизацию. Если вы только начинаете свой путь в веб-разработке, не переживайте, я постараюсь объяснить всё максимально просто, с примерами и практическими задачами. В этом уроке вы узнаете, как управлять URL-адресами вашего приложения, создавать роуты разных типов, работать с параметрами и даже использовать именованные маршруты.
Что такое роуты?
Роуты (маршруты) это «навигационная карта» вашего приложения. Они определяют, какой код должен выполняться при обращении к определённому URL. Например:
- Когда пользователь заходит на
ваш-сайт.ru/about
, Laravel смотрит в файлroutes/web.php
и ищет маршрут, связанный с/about
. - Найдя его, фреймворк выполняет привязанную к нему логику: например, возвращает представление (view) или вызывает контроллер.
Зачем это нужно?
- Чистая структура URL. Вы можете создавать понятные и SEO-дружественные адреса.
- Разделение логики. Роуты помогают организовать код, отделяя обработчики запросов от их определения.
- Гибкость. Можно легко менять логику для определённого 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');
Как использовать имя роута
- В шаблонах Blade:
<a href="{{ route('contact.page') }}">Контакты</a>
- В контроллерах или коде:
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>
Советы
- Группируйте роуты. Если у вас много маршрутов с общими префиксами или middleware, используйте
Route::group()
. - Используйте ресурсные роуты. Для CRUD-операций (создание, чтение, обновление, удаление) удобно применять
Route::resource()
. - Проверяйте существующие роуты. Команда
php artisan route:list
выведет все зарегистрированные маршруты.
В следующем уроке мы разберём контроллеры, которые хранят логику вашего приложения. Вы научитесь переносить код из анонимных функций в контроллеры, работать с методами и зависимостями.
Хотите продолжить обучение? Переходите к полному курсу — курс по Laravel для начинающих