如何在cakephp 3中取消全局事件

时间:2016-03-16 09:53:27

标签: php cakephp cakephp-3.0 cakephp-3.2

为我的查询创建了一个全局的beforeFind()侦听器,但需要为某些请求分离它。 控制器中的$ this-> eventManager() - > off()无效。即没有取消事件。 在我的bootstrap.php文件中:

$modelListerner = new DeletedListener(); //my custom listerner
EventManager::instance()->on(
        $modelListerner
        );

1 个答案:

答案 0 :(得分:0)

您无法在本地分离全局侦听器,您必须全局分离它,即通过

分离
EventManager::getInstance()->off(/* ... */);

但是你可能想要考虑将选项传递给finder是否是一个更好的解决方案,这样你的控制器就不必了解监听器之类的东西,而只需要根据需要执行find调用,比如

$Table->find('all', ['doThisAndThat' => false]);

然后你的听众可以采取相应的行动。

来自文档的引用

  

[...]此列表中没有的任何选项都将传递给beforeFind侦听器,用于修改查询对象。

<强> Cookbook > Database Access & ORM > Retrieveing Data & Result Sets > Using Finders to Load Data