我很难在CakePHP(v3.x)活动中获得最终链接。在我的控制器add
方法中,我有公共功能
add()
{
$event = new Event('Model.Comment.created', $this, [
'comment' => $comment
]);
$this->eventManager()->dispatch($event);
}
并设置我的监听器类:
namespace App\Event;
use Cake\Log\Log;
use Cake\Event\EventListener;
class CommentListener implements EventListener {
public function implementedEvents() {
return array(
'Model.Comment.created' => 'updatePostLog',
);
}
public function updatePostLog($event, $entity, $options) {
Log::write(
'info',
'A new comment was published with id: ' . $event->data['id']);
}
}
但无法正确设置侦听器,尤其是我的应用程序知道我的CommentListener
类存在。
答案 0 :(得分:1)
我有完全相同的问题,然后我找到了这篇文章: Events in CakePHP 3 – A 4 step HowTo
它确实为我解决了问题,并描述了您需要的最后一个链接步骤。假设您的Listener类位于应用程序Event
下的src
文件夹中,您需要做的只是文章中的第4步,我已将其代码示例调整为您的示例:
最后我们必须注册这个监听器。为此,我们将使用全局可用的EventManager。将以下代码放在config / bootstrap.php
的末尾
use App\Event\CommentListener;
use Cake\Event\EventManager;
$CommentListener = new CommentListener();
EventManager::instance()->attach($CommentListener);
以上是全球聆听者。也可以根据CakePhp文档(CakePHP 3.x Events System)在Model或Controller + Views层注册事件。它在行之间建议你可以在你需要的层上注册监听器 - 所以可能是AppController
回调或beforeFilter
方法上的initialize
,尽管我只测试了{{ 1}}回调。
从CakePHP 3.0.0开始更新并转发
现在已弃用函数beforeFilter
。替换函数称为attach()
,因此代码应如下所示:
on()