モジュール内のすべてのアクションの前に実行するコードを書きたいと思います。フックしようとしましonBootstrap()
たが、コードは他のモジュールでも実行されます。
私への提案はありますか?
モジュール内のすべてのアクションの前に実行するコードを書きたいと思います。フックしようとしましonBootstrap()
たが、コードは他のモジュールでも実行されます。
私への提案はありますか?
これには 2 つの方法があります。
1 つの方法は、サービスを作成し、すべてのコントローラ ディスパッチ メソッドで呼び出すことです。
Use onDispatch method in controller.
class IndexController extends AbstractActionController {
/**
*
* @param \Zend\Mvc\MvcEvent $e
* @return type
*/
public function onDispatch(MvcEvent $e) {
//Call your service here
return parent::onDispatch($e);
}
public function indexAction() {
return new ViewModel();
}
}
コードの上に次のライブラリを含めることを忘れないでください
use Zend\Mvc\MvcEvent;
2番目の方法は、ディスパッチ時にイベントを使用してModule.php経由でこれを行うことです
namespace Application;
use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;
class Module {
public function onBootstrap(MvcEvent $e) {
$sharedEvents = $e->getApplication()->getEventManager()->getSharedManager();
$sharedEvents->attach(__NAMESPACE__, 'dispatch', array($this, 'addViewVariables'), 201);
}
public function addViewVariables(Event $e) {
//your code goes here
}
// rest of the Module methods goes here...
//...
//...
}