为我的查找查询创建了一个全局 beforeFind() 侦听器,但需要为某些请求分离它。控制器中的 $this->eventManager()->off() 不起作用。即不解除事件。在我的 bootstrap.php 文件中:
$modelListerner = new DeletedListener(); //my custom listerner
EventManager::instance()->on(
$modelListerner
);
为我的查找查询创建了一个全局 beforeFind() 侦听器,但需要为某些请求分离它。控制器中的 $this->eventManager()->off() 不起作用。即不解除事件。在我的 bootstrap.php 文件中:
$modelListerner = new DeletedListener(); //my custom listerner
EventManager::instance()->on(
$modelListerner
);
您不能在本地分离全局侦听器,您必须全局分离它,即通过
EventManager::getInstance()->off(/* ... */);
但是,您可能需要考虑将选项传递给 finder 是否是一个更好的解决方案,这样您的控制器就不必知道侦听器等,而只需根据需要执行 find 调用,例如
$Table->find('all', ['doThisAndThat' => false]);
然后你的听众可以采取相应的行动。
从文档中引用
[...] 任何不在此列表中的选项都将传递给 beforeFind 侦听器,在那里它们可用于修改查询对象。