我正在创建一个模块X,它将在控制器模块中实例化。如何在模块X的方法中获取该控制器的名称?
此模块不是控制器,也不是视图或布局。
一个例子。这是控制器中的一个动作:
public function indexAction {
$parser = new Parser();
}
这是我的新模块Parser,我需要知道控制器的名称。
public function __construct() {
$controller_name = ???
}
答案 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