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');
我正在创建一个将在控制器模块内实例化的模块 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');