嗨,伙计,像很多人一样,我在实现事件到我的Cakephp应用程序中遇到了困难。如果有人能指出我在使用Cakephp v2.7时搞砸了,那就太酷了我还遵循了Martin Bean关于这个主题的教程:http://martinbean.co.uk/blog/2013/11/22/getting-to-grips-with-cakephps-events-system/
我的代码如下:应用程序/事件/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/模型/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关于这个主题的文档也有点模糊:-/
提前感谢!!把迈克尔
我建议不要直接在模型中附加事件侦听器(正如您自己的回答所建议的那样)。这在某种程度上违背了使用事件的初衷。使用事件的优点之一是,它允许您开发更易于覆盖的可扩展代码;直接从模型附加侦听器违背了这个概念。
如果你的监听器似乎没有被调用,尽管它附加到你的模型在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中的代码,将这一行添加到你的Model中:
$user->getEventManager()->attach(new UserListener());
并确保将其添加到您的模型中:
App::uses('UserListener', 'Event');