从ZF2模块打印所有路线

时间:2017-07-03 18:39:33

标签: php zend-framework2

我正在尝试使用var_dump()或任何调试功能在“某些页面”上打印模块中的所有路径。

我发现了很多帖子和样本,但我无法打印出来,大多数示例都在我的代码中失败。

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

// $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);

1 个答案:

答案 0 :(得分:2)

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

模块/应用/ SRC /应用/控制器/ IndexController.php

<?php 
namespace Application\Controller;

use Zend\View\Model\ViewModel;
use Zend\Mvc\Controller\AbstractActionController;

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的构造函数时。我们需要建立这个控制器的工厂。工厂是一个创建其他类实例的类。

模块/应用/ SRC /应用/控制器/ IndexControllerFactory.php

<?php 
namespace Application\Controller;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

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的{​​{1}}密钥下的controllers密钥中对其进行配置

模块/应用/配置/ module.config.php

module.config.php

此答案已根据@ av3建议的良好做法进行了编辑!