打印来自 ZF2 模块的所有路线



我正在尝试使用 var_dump(( 或任何调试函数在"某个页面"上打印来自我的模块的所有路由。

我找到了很多帖子和示例,但我无法打印它们,并且大多数示例在我的代码中都失败了。

到目前为止,我认为这是最好的方法,但是在哪里使用此代码?

// $sl instanceof ZendServiceManagerServiceManager
$config = $sl->get('Config');
$routes = $config['router']['routes'];

如果只想出于调试目的查看所有路由,则可以在路由器对象上使用 var_dump 或类似内容:

// $sl instanceof ZendServiceManagerServiceManager
$router = $sl->get('Router');
var_dump($router);

您可以在控制器的方法中打印所有路由。请看以下示例

module/application/src/application/controller/IndexController.php

<?php 
namespace ApplicationController;
use ZendViewModelViewModel;
use ZendMvcControllerAbstractActionController;
class IndexController extends AbstractActionController
{
/**
* @var array
*/
protected $routes;
/**
* @param array $routes
*/
public function __construct(array $routes)
{
// Here is the catch
$this->routes = $routes;
}
public function indexAction()
{
// Thus you may print all routes
$routes = $this->routes;
echo '<pre>';
print_r($routes);
echo '</pre>';
exit;
return new ViewModel();
}
}

当我们向IndexController的构造函数传递一系列路由时。我们需要为这个控制器做一个工厂。工厂是创建其他类实例的类。

module/application/src/application/controller/IndexControllerFactory.php

<?php 
namespace ApplicationController;
use ZendServiceManagerFactoryInterface;
use ZendServiceManagerServiceLocatorInterface;
class IndexControllerFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$serviceManager = $serviceLocator->getServiceLocator();
$config = $serviceManager->get('Config');
$routes = $config['router'];
return new IndexController($routes);
}
}

不能使用参数构造可调用类。我们的控制器不会像invokables那样工作,因为我们知道我们已经将参数传递给了它的构造函数。因此,我们需要在factories密钥下的controllers密钥中配置它module.config.php

module/application/config/module.config.php

'controllers' => [
'invokables' => [
// This would not work any more as we created a factory of it
// 'ApplicationControllerIndex' => 'ApplicationControllerIndexController',
],
// We should do it thus  
'factories' => [
'ApplicationControllerIndex' => 'ApplicationControllerIndexControllerFactory',
],
],

按照@av3的建议,此答案已经过编辑以保持良好实践!

最新更新