Список всех маршрутов из приложения, использующего Zend Framework 2



Как легко перечислить все маршруты, которые мы определили в нашем приложении с помощью Zend Framework 2?



Под" маршрутами " я подразумеваю те, которые определены в:



module/[moduleName]/config/module.config.php



Под



'router' => array(
'routes' => array(
...
)
)


Мне нужно перечислить их все, но я не могу понять, как это сделать легко, и ни документация, ни форумы не помогли мне сейчас.
405   3  

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

    Ничего не найдено.