[英]Cakephp Events registered but not firing
嗨Guy和很多人一样,我很难将事件实现到我的Cakephp应用程序如果有人能指出我搞砸了我在哪里使用CakePHP v2.7真的很酷我也跟着Martin Bean的主题教程: http:// martinbean .co.uk /博客/十一分之二千零十三/第22 /获取到握把与- cakephps事件系统/
我的代码如下:App / Event / UserListener.php
<?php
App::uses('CakeEventListener', 'Event');
class UserListener implements CakeEventListener {
public function implementedEvents() {
#@:off;
return array(
'Model.User.test' => 'test',
'Model.User.created' => 'sendActivationEmail',
);
#@:on;
}
public function test($event) {
for ($i = 0; $i < 10; $i++) {
echo "string<br />";
}
CakeLog::write('CakeEvents', 'Testevent Fired');
}
public function sendActivationEmail($event) {
}
}
在App / Model / User.php中
<?php
App::uses('AppModel', 'Model');
App::uses('Role', 'Model');
App::uses('Clroute', 'Model');
App::uses('CakeEvent', 'Event');
public function afterFind($results, $primary = true) {
$Event = new CakeEvent('Model.User.test', $this, array(
#@:off;
'id' => 66,
'data' => 'ppx'
)
);
#@:on;
CakeLog::write('CakeEvents', 'Testevent dispatch in UserModel');
$this -> getEventManager() -> dispatch($Event);
if ($results[0]['Salon']['id'] == null) {
$results[0]['Salon'] = FALSE;
}
return $results;
}
最后但并非最不重要的是在App / Config / bootstrap.php中
App::uses('ClassRegistry', 'Utility');
App::uses('UserListener', 'Event');
$user = ClassRegistry::init('User');
$user->getEventManager()->attach(new UserListener());
如果你可以帮助我,那将是很棒的,因为我真的被困在那里,Cakephp关于这个主题的文档也有点模糊: - /
大THX提前!! 问迈克尔
我建议不要在模型中直接附加事件监听器(如您自己的答案所示)。 这在一定程度上打败了使用事件的重点。 使用事件的一个优点是它允许您开发更容易被覆盖的可扩展代码; 直接从模型附加监听器违背了这个概念。
如果您的监听器似乎没有被调用,尽管它在bootstrap.php
附加到您的模型,您可能需要全局附加它: -
// In app/Config/bootstrap.php
App::uses('CakeEventManager', 'Event');
App::uses('UserListener', 'Lib/Event');
CakeEventManager::instance()->attach(new UserListener());
这不是将其直接附加到User
模型。
废弃App / Config / bootstrap.php中的代码,而不是将此行添加到您的模型中:
$user->getEventManager()->attach(new UserListener());
并确保将此添加到您的模型中:
App::uses('UserListener', 'Event');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.