特定のことが起こったときに、各モジュールにイベントトリガーを実装する必要があります。また、そのイベントがトリガーされたときに何らかの作業を実行する必要がある他のすべてのモジュールに注意する必要があります。
トリガーを送信でき、すべてのモジュールがリッスンする必要がある共通のエンドポイントを作成しようとしていますが、それを実現する方法を見つけるのに問題があります。
何か案は?
特定のことが起こったときに、各モジュールにイベントトリガーを実装する必要があります。また、そのイベントがトリガーされたときに何らかの作業を実行する必要がある他のすべてのモジュールに注意する必要があります。
トリガーを送信でき、すべてのモジュールがリッスンする必要がある共通のエンドポイントを作成しようとしていますが、それを実現する方法を見つけるのに問題があります。
何か案は?
@Andrewの回答へのコメントに基づいて、コントローラーが拡張している限りAbstractActionController
(ほとんどの場合はそうなります)、既にEventManagerに対応しているため、コントローラーアクションで好きなイベントをトリガーするだけで...
<?php
namespace Application/Controller;
// usual use statements omitted for brevity ..
class IndexController extends AbstractActionController
{
public function indexAction()
{
// trigger MyEvent
$this->getEventManager()->trigger('MyEvent', $this);
}
}
他のモジュールのブートストラップでそのイベントをリッスンするには、次のようにします
public function onBootstrap(EventInterface $e)
{
$app = $e->getApplication();
// get the shared events manager
$sem = $app->getEventManager()->getSharedManager();
// listen to 'MyEvent' when triggered by the IndexController
$sem->attach('Application\Controller\IndexController', 'MyEvent', function($e) {
// do something...
});
}
これに関するいくつかの良い記事があります:
http://www.mwop.net/blog/266-Using-the-ZF2-EventManager.html
http://www.eschrade.com/page/zend-framework-2-event-manager/
モジュールにアプリケーション全体のイベントをリッスンさせ、トリガーされたときにいくつかのタスクを実行させるのは非常に簡単です。これらの2つには、開始するのに十分な情報が含まれている必要があります。
あなたが望むものの例を挙げれば、私はあなたがそれをどうやって進めることができるかの例を手伝うことができます。