Я попытался получить имя контроллера и имя действия в файле макета. Но не мог. В ZF1 мы использовали экземпляр Front Controller для получения имени контроллера и действия. Я много занимался веб-сайтами. Но решения нет. Как я могу попасть в ZF2?Zend Framework 2 - Получить контроллер и имя действия в макете
0
A
ответ
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
я получил ответ выше, чтобы работать, но я должен был использовать 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()
в контроллере
Прежде всего, 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
Вы спрашиваете у serviceManager, чтобы получить «modulename» службы? Похоже, что это не связано с тем, что вы просили здесь. – netiul
Спасибо за ваш ответ. 'modulename' - мой модуль. Я использовал приведенный выше код в этом модуле. После этого я получаю вышеуказанную ошибку. – 2plus