-
Notifications
You must be signed in to change notification settings - Fork 9
Description
Описание
Система роутинга MiniShop3 сейчас поддерживает кастомизацию через два файла:
core/config/ms3_routes_web.custom.phpcore/config/ms3_routes_manager.custom.php
Этот подход работает для ручной кастомизации одним разработчиком, но не подходит для сторонних компонентов — если два аддона хотят добавить свои роуты, они оба пишут в один файл, что создаёт конфликты при установке и удалении.
Решение
Добавить модульную загрузку роутов из директории core/config/ms3.routes.d/ — по аналогии с уже работающим ms3.services.d/ для сервисов.
Структура
core/config/ms3.routes.d/
web/
50-mydelivery.php ← Web API роуты аддона
manager/
50-mydelivery.php ← Manager API роуты аддона
Порядок загрузки роутов
- Системные роуты (
config/routes/web.php/config/routes/manager.php) - Пользовательские роуты (
ms3_routes_web.custom.php/ms3_routes_manager.custom.php) - NEW: Аддон-роуты из
ms3.routes.d/web/*.php/ms3.routes.d/manager/*.php(в алфавитном порядке) build()dispatcher
Каждый следующий уровень может переопределять роуты предыдущего (через ключ METHOD:PATTERN).
Пример файла аддона
<?php
// core/config/ms3.routes.d/web/50-mydelivery.php
// Доступны: $router, $modx
use MiniShop3\Router\Response;
use MiniShop3\Middleware\TokenMiddleware;
$router->group('/api/v1/delivery/mydelivery', function($router) use ($modx) {
$router->post('/calculate', function($params) use ($modx) {
return Response::success(['cost' => 500]);
});
$router->get('/points', function($params) use ($modx) {
return Response::success(['points' => []]);
});
}, [new TokenMiddleware($modx)]);Что нужно сделать
- Добавить метод
loadRoutesFromDirectory(string $dir)вRouter - Вызвать загрузку из
ms3.routes.d/web/вapi.php(после custom routes, доbuild()) - Вызвать загрузку из
ms3.routes.d/manager/вProcessors\Api\Router.php(аналогично) - Создать директории
ms3.routes.d/web/иms3.routes.d/manager/через resolver при установке - Добавить example-файл для документации
- Обновить
CHANGELOG.md
Преимущества
- Консистентность — паттерн
*.d/уже используется дляms3.services.d/ - Изоляция — каждый аддон в своём файле, install/uninstall атомарный
- Нет конфликтов — несколько аддонов не пересекаются
- Простота — минимум изменений в ядре (~30 строк)
- Дебаг — файлы видны в ФС, легко проверить что загружено
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels