CLI · Winter Console

Команда mapping

mapping показывает, какие маршруты приложение на самом деле отдаёт наружу: глаголы, пути и обработчики. Сервер для этого поднимать не нужно — команда сканирует проект сама.

Субкоманда showСервер не требуется

Что такое mapping и зачем

mapping — команда просмотра таблицы маршрутов.

Проблема. Маршруты в Winter не перечислены в одном файле: они рассыпаны атрибутами по контроллерам, а итоговый путь складывается из префикса класса, префикса плагина и пути метода. Ответить по коду на вопрос «что именно отвечает по /api/v1/orders» — значит собрать эту сумму в уме по нескольким файлам.

Решение. Команда собирает таблицу тем же способом, что и приложение при старте, и показывает готовый результат.

Использование

bash
php call mapping             # все маршруты
php call mapping show        # то же самое
php call mapping show api/user   # только пути, содержащие api/user
text
 |   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: он готовит список классов проекта, которым пользуются и контейнер, и сканер маршрутов.

Дальше