我正在尝试使用http://docs.phalconphp.com/en/latest/reference/models.html#using-a-custom-events-manager所述的事件管理器示例。
class Products extends Phalcon\Mvc\Model
{
public function initialize()
{
$eventsManager = new Phalcon\Events\Manager();
$eventsManager->attach('model', function($event, $robot) {
// Do something (or nothing at all).
return true;
});
$this->setEventsManager($eventsManager);
$this->setSource('products');
}
}
$o = Products::findFirst();
$o->we = 5;
$o->save();
这会导致以下错误:
脚本引发E_ERROR并显示消息“Phalcon \ Mvc \ Model \ Manager :: notifyEvent():在非对象上调用方法fire()”
在EventsManager设置中我缺少什么?
我在使用Phalcon 1.3.0。
谢谢, Temuri
答案 0 :(得分:2)
这看起来像一个错误:
if (Z_TYPE_P(custom_events_manager) == IS_ARRAY) {
+ zval *mgr;
PHALCON_INIT_NVAR(entity_name);
phalcon_get_class(entity_name, model, 1 TSRMLS_CC);
- if (phalcon_array_isset(custom_events_manager, entity_name)) {
+ if (phalcon_array_isset_fetch(&mgr, custom_events_manager, entity_name)) {
PHALCON_INIT_NVAR(fire_event_name);
PHALCON_CONCAT_SV(fire_event_name, "model:", event_name);
PHALCON_INIT_NVAR(status);
- phalcon_call_method_p2(status, custom_events_manager, "fire", fire_event_name, model);
+ phalcon_call_method_p2(status, mgr, "fire", fire_event_name, model);
if (PHALCON_IS_FALSE(status)) {
RETURN_CTOR(status);
}
}
}