我正在回复这个问题,因为我的问题是了解如何集成这两个框架,以便我可以让 Symfony 的 EventDispatcher 在我的所有 ZF 应用程序(包括模块)上工作。
这是我的解决方案:在引导程序上..
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/
我仍在从事这项工作,但看起来它在第一次测试中运行良好......