0

よりも多くのルーティング情報が利用可能である必要がある場所で、onDispatch()メソッドをサブスクライブすることができました。Application\Module.phponBootstrap()

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、URL にあるものを受け取りmy-controllerたいとします。また、ルーティングがより複雑になる可能性があるため、URL に依存したくないため、URL 自体で文字列の照合を行いたくありません。

また、知っている場合は、アクション名も取得する方法を教えてください。

4

2 に答える 2

2

ディスパッチ リスナーの MvcEvent で利用可能な routematch からその情報を取得できます。

public function onDispatch(\Zend\Mvc\MvcEvent $e)
{
    $routeMatch = $e->getRouteMatch();
    $controller = $routeMatch->getParam('controller');
    $action = $routeMatch->getParam('action');
}
于 2013-08-16T17:00:10.890 に答える
0

私はついに答えを見つけました。その答えは、Bram Gerritsen が言ったことと似ています。

controller問題は、名前空間を前に付けたり、コントローラー名を大文字にしたり、キャメルケースをダッシュ​​で区切ったりすることで、元のパラメーターがオーバーライドされることです。これは、メソッド\Zend\Mvc\ModuleRouteListenerの終わり近くにあります。onRoute()

ご覧のとおり、元のコントローラー パラメーターは__CONTROLLER__パラメーターの下に保存されるか、または定数を使用して保存されます\Zend\Mvc\ModuleRouteListener::ORIGINAL_CONTROLLER

したがって、最終的に、現在のコントローラーがであり、元のコントローラー パラメーター (ではなく\Application\Controller\MyControllerControllerなど) を取得したい場合は、これを呼び出す必要があります。my-controllerApplication\Controller\MyController

public function onDispatch(\Zend\Mvc\MvcEvent $e)
{
    $routeMatch = $e->getRouteMatch();
    $controllerParamName = \Zend\Mvc\ModuleRouteListener::ORIGINAL_CONTROLLER;
    $controller = $routeMatch->getParam($controllerParamName); // my-controller
}
于 2013-09-11T17:17:36.120 に答える