Zend Framework 2:获取模块内的当前控制器名称

Zend Framework 2: Getting current controller name inside a module

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

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

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

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

这是我的新模块解析器,我需要在其中知道控制器的名称。

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

我想这个问题以前有人问过,但我想你问过:

$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

对于此类依赖项,您应该使用工厂来创建服务实例。然后你可以在那里注入任何你想要的东西,还有一个控制器名称。例如,您的 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;
    }
}

你的解析器class:

<?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');