0

レイアウトファイルでコントローラー名とアクション名を取得しようとしました。しかし、できませんでした。ZF1 では、コントローラーとアクション名を取得するために Front Controller インスタンスを使用しました。私はウェブサイトをたくさんサーフィンしました。しかし、解決策はありません。どうすればZF2に入ることができますか?

4

2 に答える 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 に答える