Команда mapping
mapping показывает, какие маршруты приложение на самом деле отдаёт наружу:
глаголы, пути и обработчики. Сервер для этого поднимать не нужно — команда
сканирует проект сама.
Что такое mapping и зачем
mapping — команда просмотра таблицы маршрутов.
Проблема. Маршруты в Winter не перечислены в одном файле: они рассыпаны
атрибутами по контроллерам, а итоговый путь складывается из префикса класса,
префикса плагина и пути метода. Ответить по коду на вопрос «что именно отвечает по
/api/v1/orders» — значит собрать эту сумму в уме по нескольким файлам.
Решение. Команда собирает таблицу тем же способом, что и приложение при старте, и показывает готовый результат.
Использование
php call mapping # все маршруты
php call mapping show # то же самое
php call mapping show api/user # только пути, содержащие api/user | GET /api/posts → MainPostController::index
| POST /api/posts → MainPostController::create
| GET /api/posts/{id:d+} → MainPostController::get
| PUT /api/posts/{id:d+} → MainPostController::update
| DELETE /api/posts/{id:d+} → MainPostController::deleteАргумент — фрагмент пути, крайние слэши отбрасываются, совпадение ищется вхождением. Маршруты отсортированы по пути, так что все методы одного ресурса стоят рядом.
Для чего пригождается
Проверить новый эндпоинт. Дописали контроллер — одной командой убедились, что он зарегистрировался и путь сложился так, как задумано.
Найти причину 404. Если маршрута нет в выводе, значит контроллер не попал в
скан. Обычно это одно из трёх: файл лежит в resources/ или storage/ (эти
каталоги исключены), класс объявлен абстрактным, либо метод не публичный.
Увидеть конфликт. Дублирующая пара «глагол + путь» роняет приложение при старте, и команда покажет ту же ошибку — но без запуска сервера.
Посмотреть, что добавили плагины. Их маршруты приходят со своим префиксом и видны в общей таблице наравне с вашими.
Кеша маршрутов нет
Таблица собирается заново при каждом вызове — и точно так же при каждом старте приложения. Отдельного файла с маршрутами не существует, поэтому устареть выводу негде и «пересобирать» перед деплоем нечего.
Ускорять старт умеет di build: он готовит список классов
проекта, которым пользуются и контейнер, и сканер маршрутов.
Дальше
- Маршрутизация — как складывается путь и что попадает в таблицу
- di — кеш списка классов, ускоряющий старт
- Консоль — обзор