Kyl*_*lan 5 php cakephp cakephp-3.0
我正在努力让 CakePHP (v3.x) 事件中的最终链接正常工作。在我的控制器add方法中我有公共功能
add()
{
$event = new Event('Model.Comment.created', $this, [
'comment' => $comment
]);
$this->eventManager()->dispatch($event);
}
Run Code Online (Sandbox Code Playgroud)
并设置我的监听器类:
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']);
}
}
Run Code Online (Sandbox Code Playgroud)
但无法正确设置侦听器,特别是当我的应用程序知道我的CommentListener类存在时。
小智 6
我遇到了完全相同的问题,然后我发现了这篇文章:\n CakePHP 3 \xe2\x80\x93 中的事件 A 4 步骤操作方法
\n它确实为我澄清了事情,并描述了您需要的最后一个链接步骤。假设您的 Listener 类位于应用程序Event下的文件夹中src,您所需要做的就是本文中的步骤 4,我已将其代码示例改编为您的示例:
\n\n最后我们必须注册这个监听器。为此,我们将使用全局可用的 EventManager。将以下代码放在 config/bootstrap.php 的末尾
\n
use App\\Event\\CommentListener;\nuse Cake\\Event\\EventManager;\n\n$CommentListener = new CommentListener();\nEventManager::instance()->attach($CommentListener);\nRun Code Online (Sandbox Code Playgroud)\n上面是一个全局监听器。还可以根据 CakePHP 文档(CakePHP 3.x 事件系统)在模型或控制器+视图层上注册事件。它暗示您可以在所需的层上注册侦听器 - 因此可能在回调或方法AppController上注册侦听器,尽管我只测试了回调。beforeFilterinitializebeforeFilter
从 CakePHP 3.0.0 开始更新并向前
\n该功能attach()现已被弃用。调用替换函数on(),因此代码应如下所示:
use App\\Event\\CommentListener;\nuse Cake\\Event\\EventManager;\n\n$CommentListener = new CommentListener();\nEventManager::instance()->on($CommentListener); // REPLACED \'attach\' here with \'on\'\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2933 次 |
| 最近记录: |