私の問題は、モジュールを含むすべての ZF アプリケーションで Symfony の EventDispatcher を動作させることができるように、両方のフレームワークを統合する方法を理解することでした。
これが私の解決策でした:ブートストラップで..
public function run()
{
$dispatcher = $this->getResource("Far_Resource_EventDispatcher");
$dispatcher->dispatch("bootstrap.prerun", null);
$listener = new DM_Service_StockListener();
$dispatcher->addListener(
"equipment.new",
array($listener, 'onEquipment')
);
parent::run();
$dispatcher->dispatch("bootstrap.postrun", null);
}
この方法で EventDispatcher をインスタンス化するためのリソースを作成しました。これは、ブートストラップによってグローバルにアクセスでき、リソースを持って開始できます。リソース コードは次のとおりです。
class Far_Resource_EventDispatcher extends Zend_Application_Resource_ResourceAbstract
{
private $_dispatcher = null;
public function init()
{
if ($this->_dispatcher === null ) {
require APPLICATION_PATH .
'/../library/Symfony/Component/EventDispatcher/EventDispatcher.php';
$dispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher();
} else {
$dispatcher = $this->_dispatcher;
}
$this->getBootstrap()->eventDispatcher = $dispatcher;
return $dispatcher;
}
}
そして、application.iniでセットアップします
pluginPaths.Far_Resource_EventDispatcher = APPLICATION_PATH "/../library/Far/Resource/EventDispatcher.php"
resources.Far_Resource_EventDispatcher = true;
リソースの作成方法については、次の例を使用しました:
http://blog.madarco.net/327/how-to-make-your-own-zend-framework-resource-plugin/
私はまだこれに取り組んでいますが、最初のテストではうまく機能しているようです...