Список всех маршрутов из приложения, использующего Zend Framework 2
Как легко перечислить все маршруты, которые мы определили в нашем приложении с помощью Zend Framework 2?
Под" маршрутами " я подразумеваю те, которые определены в:
module/[moduleName]/config/module.config.php
Под
'router' => array(
'routes' => array(
...
)
)
Мне нужно перечислить их все, но я не могу понять, как это сделать легко, и ни документация, ни форумы не помогли мне сейчас.
3 ответов:
Вы можете найти полную (объединенную) конфигурацию или дамп самого маршрутизатора. Нет способа экспортировать все объекты маршрута, поэтому я должен вас разочаровать.
Чтобы получить полную конфигурацию, получите ее из локатора служб:
// $sl instanceof Zend\ServiceManager\ServiceManager $config = $sl->get('COnfig'); $routes = $config['router']['routes'];Если вы хотите просмотреть все маршруты только для отладки, вы можете использовать
var_dumpили аналогичный на объекте маршрутизатора:// $sl instanceof Zend\ServiceManager\ServiceManager $router = $sl->get('Router'); var_dump($router);Чтобы получить экземпляры маршрутов, вы можете построить маршруты самостоятельно с помощью менеджера плагинов маршрутов, но я не уверен, что это так. хотите пойти...
Для получения всех маршрутов я использую ZFTool
И консольная команда для получения дампа маршрутов:
php vendor/bin/zf.php config list | grep routesДля пользователей Windows (не протестировано):
php vendor/bin/zf.php config list | findstr /R /C:"[routes]"
Мне нужно было дифференцировать маршруты для каждого модуля, чтобы мы могли использовать настройку ACL BjyAuthorize соответственно в разных ситуациях.
В то время как есть более чем один способ сделать это, например, как показано Jurian Sluiman , Чтобы прочитать во всех маршрутах (переменные изменены):
// $this->services instanceof Zend\ServiceManager\ServiceManager $config = $this->services->get('Config'); $routes = $config['router']['routes'];Вы можете получить их следующим образом для дальнейшего дифференцирования по модулю в функции :
// $this->services instanceof Zend\ServiceManager\ServiceManager /** * Load the Application's active modules. * @note May need to specify additional modules that may not be * loaded at this runtime. */ $moduleManager = $this->services->get('ModuleManager'); $moduleManager->loadModules(); // Retrieve array of module names. $modules = $moduleManager->getModules(); // Setup a container for all active routes. $routes = []; // Build array of all active routes. foreach ($modules as $moduleName) { $module = $moduleManager->getModule($moduleName); $routes[$moduleName] = array_keys($module->getConfig()['router']['routes']); } // Whatever you care to do with them. echo $routes;
Comments