Маршруты в Laravel: с чего начать новичку
За полчаса вы научитесь объявлять маршруты в Laravel 11, связывать их с контроллерами, передавать параметры и находить нужный URL по имени — без магии и лишней теории.

К концу этого разбора у вас будет работающее приложение на Laravel 11, которое отвечает на несколько разных URL: отдаёт статичную страницу, принимает параметр из адреса и вызывает метод контроллера. Займёт это около получаса, если PHP и Composer уже установлены. Мы не будем разбирать, как устроен роутинг внутри — только то, что нужно, чтобы получить первый работающий маршрут.
Что нужно иметь до начала
Проверьте, что всё на месте, иначе застрянете на середине.
- PHP 8.2 или новее — Laravel 11 не запустится на 8.1. Проверьте командой
php -v. - Composer — менеджер зависимостей PHP. Команда
composer --versionдолжна что-то показать. - Установленный проект Laravel 11. Если проекта ещё нет, создайте его:
composer create-project laravel/laravel my-app, затем зайдите в папкуcd my-app.
Запустите встроенный сервер командой php artisan serve. В терминале появится строка вида Server running on [http://127.0.0.1:8000]. Откройте этот адрес в браузере — увидите стартовую страницу Laravel. Значит, всё работает и можно двигаться дальше.
Где живут маршруты
В Laravel 11 веб-маршруты объявляются в файле routes/web.php. Откройте его — там уже есть один маршрут, который отдаёт стартовую страницу:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Разберём по частям одним предложением: Route::get говорит «отвечай на GET-запрос», первый аргумент '/' — это URL, а замыкание возвращает то, что увидит пользователь.
GET-запрос — тип HTTP-запроса, который браузер отправляет, когда вы просто открываете страницу или переходите по ссылке. Отправка формы обычно идёт через POST — для него есть отдельный метод Route::post.
Шаг за шагом: первые маршруты
-
Добавьте простой маршрут, возвращающий текст. В конец
routes/web.phpвпишите:Route::get('/hello', function () { return 'Привет из Laravel'; });Сохраните файл и откройте
http://127.0.0.1:8000/hello. В браузере появится строка «Привет из Laravel». Перезапускать сервер не нужно — Laravel подхватывает изменения в маршрутах сам. -
Передайте параметр через URL. Часть адреса в фигурных скобках станет переменной:
Route::get('/user/{id}', function (string $id) { return 'Профиль пользователя №' . $id; });Откройте
http://127.0.0.1:8000/user/42— увидите «Профиль пользователя №42». Имя параметра в фигурных скобках должно совпадать с именем аргумента функции. -
Сделайте параметр необязательным. Добавьте знак вопроса и значение по умолчанию:
Route::get('/greet/{name?}', function (string $name = 'гость') { return 'Здравствуйте, ' . $name; });Адрес
/greet/Аннавернёт «Здравствуйте, Анна», а просто/greet— «Здравствуйте, гость». -
Ограничьте формат параметра. Чтобы
idпринимал только цифры, добавьтеwhere:Route::get('/order/{id}', function (string $id) { return 'Заказ №' . $id; })->where('id', '[0-9]+');Теперь
/order/15работает, а/order/abcвернёт ошибку 404 — маршрут просто не совпадёт.
Связываем маршрут с контроллером
Держать логику в замыканиях удобно для двух строк, но для реального кода её выносят в контроллеры. Создайте контроллер командой:
php artisan make:controller PageController
Появится файл app/Http/Controllers/PageController.php. Добавьте в него метод:
<?php
namespace App\Http\Controllers;
class PageController extends Controller
{
public function about()
{
return 'Страница «О нас»';
}
}
Теперь свяжите маршрут с этим методом в routes/web.php:
use App\Http\Controllers\PageController;
Route::get('/about', [PageController::class, 'about']);
Откройте http://127.0.0.1:8000/about — увидите «Страница «О нас»». Строку use добавьте вверху файла, рядом с существующим use Illuminate\Support\Facades\Route;.
Имена маршрутов: чтобы не искать URL по всему проекту
Прописывать адрес /about руками в шаблонах — плохая идея: поменяете URL и будете чинить ссылки по всему коду. Дайте маршруту имя:
Route::get('/about', [PageController::class, 'about'])->name('about');
Теперь URL можно получить по имени функцией route('about') — она вернёт полный адрес. Если завтра вы смените путь на /about-us, все ссылки обновятся сами.
Правило, которое экономит часы: как только у маршрута появляется больше одной ссылки в шаблонах, давайте ему имя. Хардкод URL в шаблоне — первое, что ломается при рефакторинге.
Основные методы для старта
| Метод | Когда использовать |
|---|---|
Route::get() | Открытие страницы, чтение данных |
Route::post() | Отправка формы, создание записи |
Route::put() / Route::patch() | Обновление существующей записи |
Route::delete() | Удаление записи |
Route::view() | Отдать шаблон без логики, одной строкой |
Список всех зарегистрированных маршрутов удобно смотреть командой php artisan route:list — она покажет метод, URL, имя и привязанный контроллер.
Если не получилось
- 404 Not Found на новом маршруте. Проверьте, что файл сохранён и вы обращаетесь к тому URL, что указан в
Route::get. Опечатка в пути — самая частая причина. Помогаетphp artisan route:list: если маршрута в списке нет, значит, файл не подхватился. - Target class [PageController] does not exist. Забыли строку
use App\Http\Controllers\PageController;вверху файла маршрутов или ошиблись в namespace контроллера. - Route [about] not defined. Вызвали
route('about'), но у маршрута нет->name('about'). Добавьте имя или проверьте, что оно написано так же. - Изменения в маршрутах не видны. Иногда мешает кеш маршрутов. Выполните
php artisan route:clearи обновите страницу. - Too few arguments to function. В маршруте объявлен параметр
{id}, но в функции контроллера или замыкания нет соответствующего аргумента. Имена должны совпадать.
Что делать дальше
Когда базовые маршруты работают, следующий логичный шаг — Route::resource: одна строка создаёт сразу семь маршрутов для типичного CRUD (список, создание, просмотр, редактирование, удаление). Дальше стоит разобраться с группами маршрутов и middleware — чтобы, например, закрыть часть страниц авторизацией. Route Model Binding, который сам подставляет модель по параметру URL, — отдельная тема, здесь мы её не трогали. Точный набор методов и их поведение всегда сверяйте с документацией именно для Laravel 11: между мажорными версиями структура файлов маршрутов менялась.
Репетитор 1—11 класс и ВУЗ: Математика и физика методом наведения на мысль, помощь с ДЗ.
Спросить за 8 ₽Источники: Laravel 11.x — Routing (официальная документация), Laravel 11.x — Controllers
Частые вопросы
У меня Laravel 10, а не 11 — эти маршруты сработают?
Маршрут добавил, а браузер всё равно показывает 404. Что не так?
Нужно ли перезапускать php artisan serve после изменения маршрутов?
В чём разница между Route::get с замыканием и с контроллером?
Можно ли задать один и тот же URL для GET и POST?
Где смотреть, если я не уверен в синтаксисе конкретного метода?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.