2013-08-16 3 views
0

Мне уже удалось подписаться на метод onDispatch() в моем Application\Module.php, где должно быть доступно больше информации о маршрутизации, чем onBootstrap().Получить имя контроллера от модуля.php

public function onBootstrap(MvcEvent $e) { 
    $em = $e->getApplication()->getEventManager(); 
    $em->attach(\Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'onDispatch')); 
} 

public function onDispatch(\Zend\Mvc\MvcEvent $e) { 
    //$controllerName = /* ... ? */; 
    $e->getViewModel()->setVariables(
     array('controllerName'=> $controllerName, 
     'actionName' => $actionName) 
    ); 
return parent::onDispatch($e); 

Что мне нужно, чтобы вызвать имя контроллера? И я имею в виду не класс, но скажу, если мой класс контроллера, если Application\Controller\MyController, я хотел бы получить my-controller как то, что можно найти в URL-адресе. Я также не хотел бы выполнять сопоставление строк по самому URL-адресу, поскольку я не хочу полагаться на него из-за возможной более сложной маршрутизации.

Кроме того, если вы знаете, скажите, пожалуйста, как я могу получить название действия.

ответ

0

Я наконец нашел ответ. Ответ подобен тому, что сказал Брам Герритсен.

Дело в том, что исходный параметр controller переопределяется тем, что имеет пространство имен, заглавное имя контроллера, тире, разделяющее то, что было в случае с верблюдом и т. Д. Это можно найти в \Zend\Mvc\ModuleRouteListener в конце метода onRoute().

Как видно, исходный параметр контроллера сохраняется в параметре __CONTROLLER__ или с использованием констант \Zend\Mvc\ModuleRouteListener::ORIGINAL_CONTROLLER.

Таким образом, в конце концов, если мой текущий контроллер \Application\Controller\MyControllerController, и я хочу, чтобы получить исходный параметр контроллера (например, my-controller, не Application\Controller\MyController), мне нужно, чтобы назвать это:

public function onDispatch(\Zend\Mvc\MvcEvent $e) 
{ 
    $routeMatch = $e->getRouteMatch(); 
    $controllerParamName = \Zend\Mvc\ModuleRouteListener::ORIGINAL_CONTROLLER; 
    $controller = $routeMatch->getParam($controllerParamName); // my-controller 
} 
2

Вы можете получить эту информацию из списка маршрутов, доступного в MvcEvent в диспетчерском прослушивателе.

public function onDispatch(\Zend\Mvc\MvcEvent $e) 
{ 
    $routeMatch = $e->getRouteMatch(); 
    $controller = $routeMatch->getParam('controller'); 
    $action = $routeMatch->getParam('action'); 
} 
+0

Спасибо, но это не что я ищу. Я ищу получение имени контроллера в форме, которая будет взята из URL-адреса с помощью маршрута приложения по умолчанию, который поставляется с приложением Zend Skeleton. Таким образом, ваш бит кода даст мне контроллер по умолчанию как «Application \ Controller \ Index». Я хотел бы получить его как 'index'. Точно так же он будет извлечен для URL-адреса, и то же самое я могу передать его любому помощнику сборки url в качестве параметра контроллера. –

Смежные вопросы