2013-01-10 3 views
0

Я попытался получить имя контроллера и имя действия в файле макета. Но не мог. В ZF1 мы использовали экземпляр Front Controller для получения имени контроллера и действия. Я много занимался веб-сайтами. Но решения нет. Как я могу попасть в ZF2?Zend Framework 2 - Получить контроллер и имя действия в макете

ответ

5

Контроллеры и их сценарии просмотра разделены. Фактически, в одном запросе может быть несколько контроллеров.

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

Один из способов сделать это внутри события Bootstrap, которое должно быть в классе модуля.

public function onBootstrap(\Zend\EventManager\EventInterface $e) 
{ 
    $app = $e->getApplication(); 
    $app->getEventManager()->attach(
     'dispatch', 
     function($e) { 
      $routeMatch = $e->getRouteMatch(); 
      $viewModel = $e->getViewModel(); 
      $viewModel->setVariable('controller', $routeMatch->getParam('controller')); 
      $viewModel->setVariable('action', $routeMatch->getParam('action')); 
     }, 
     -100 
    ); 
+0

Прежде всего, thasnk. я проверил. Но я получаю следующую ошибку. Неустранимая ошибка: исключение «Zend \ ServiceManager \ Exception \ ServiceNotFoundException» с сообщением «Zend \ ServiceManager \ ServiceManager :: get не удалось получить или создать экземпляр для modulename» в/var/www/app/vendor/zendframework/zendframework/библиотека/Zend/ServiceManager/ServiceManager.php: 452 Трассировка стека: # 0 /var/www/app/vendor/zendframework/zendframework/library/Zend/ServiceManager/AbstractPluginManager.php(110): Zend \ ServiceManager \ ServiceManager-> get ('modulename', true) – 2plus

+0

Вы спрашиваете у serviceManager, чтобы получить «modulename» службы? Похоже, что это не связано с тем, что вы просили здесь. – netiul

+0

Спасибо за ваш ответ. 'modulename' - мой модуль. Я использовал приведенный выше код в этом модуле. После этого я получаю вышеуказанную ошибку. – 2plus

0

я получил ответ выше, чтобы работать, но я должен был использовать sharedManager передать представления в контроллер

$app = $e->getApplication(); 
    $app->getEventManager()->getSharedManager()->attach(
     __NAMESPACE__, 
     'dispatch', 
     function($e) { 
      $routeMatch = $e->getRouteMatch(); 
      $viewModel = $e->getViewModel(); 
      $viewModel->setVariable('controller', $routeMatch->getParam('controller')); 
      $viewModel->setVariable('action', $routeMatch->getParam('action')); 
      $controller = $e->getTarget(); 
      $controller->view = $viewModel; 
     }, 
     100 
    ); 

Если бы я хотел использовать ответ выше как я должен был сделать

$this->getEvent('dispatch')->getViewModel() 

в контроллере

+0

Спасибо, Но, где мы должны поместить этот код в мои действия. $ this-> getEvent ('dispatch') -> getViewModel() – 2plus

+0

Можем ли мы это сделать с сервис-менеджером? – 2plus

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