レイアウトファイルでコントローラー名とアクション名を取得しようとしました。しかし、できませんでした。ZF1 では、コントローラーとアクション名を取得するために Front Controller インスタンスを使用しました。私はウェブサイトをたくさんサーフィンしました。しかし、解決策はありません。どうすればZF2に入ることができますか?
質問する
6149 次
2 に答える
5
コントローラーとそのビュー スクリプトは分離されています。実際、1 つの要求に複数のコントローラーが関与している可能性があります。
リクエストがディスパッチされたコントローラーとアクションが必要な場合は、ディスパッチ イベントにフックしてそれらを挿入し、アタッチされた ViewModel にコントローラーとアクション名を挿入できます。
これを行う 1 つの方法は、Module クラスにある Bootstrap Event 内にあります。
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
);
于 2013-01-10T11:05:44.943 に答える
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()
コントローラーで
于 2013-01-11T17:15:36.127 に答える