Zend Framework 2:在模块中获取当前控制器名称

时间:2015-08-06 21:54:18

标签: php dependency-injection zend-framework2

我正在创建一个模块X,它将在控制器模块中实例化。如何在模块X的方法中获取该控制器的名称?

此模块是控制器,也不是视图或布局。

一个例子。这是控制器中的一个动作:

public function indexAction {
    $parser = new Parser();
}

这是我的新模块Parser,我需要知道控制器的名称。

public function __construct() {
    $controller_name = ???
}

2 个答案:

答案 0 :(得分:2)

对于此类依赖项,您应该使用工厂来创建服务实例。然后你可以在那里注入你想要的任何东西,也可以是控制器名称。您的ParserFactory可能就像这样:

<?php
namespace Application\Factory;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Application\Service\Parser

class ParserFactory implements FactoryInterface
{
    /**
     * @param  ServiceLocatorInterface $serviceLocator
     * @return Parser
     */
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $routeMatch = $serviceLocator->get('Application')->getMvcEvent()->getRouteMatch();
        $controllerName = $routeMatch->getParam('controller');
        $parser = new Parser($controllerName);
        return $parser;
    }
}

你的Parser课程:

<?php
namespace Application\Service;

class Parser
{
    /**
     * @param  string $controllerName
     */
    public function __construct($controllerName)
    {
        //... use your controller name ...
    }
}

module.config.php注册您的工厂,如下所示:

'service_manager' => array(
    'factories' => array(
        'Parser' => 'Application\Factory\ParserFactory',
    )
)

ServiceManager这样的地方获取您需要的服务:

$parser = $serviceManager->get('Parser');

答案 1 :(得分:0)

我认为之前有人问过,但我认为你这样做了:

$this->getEvent()->getRouteMatch()->getParam('controller', 'index');

你应该能够从路由器中获取所有内容。

编辑:

是的,看看这些:

How to get the controller name, action name in Zend Framework 2

ZF2 - Get controller name into layout/views

ZF2: Get module name (or route) in the application layout for menu highlight