1

我正在尝试使用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(): Call to method fire() on a non-object”

我在 EventsManager 设置中缺少什么?

我在 Phalcon 1.3.0 上。

谢谢, Temuri

4

1 回答 1

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);
            }
        }
    }
于 2013-09-30T02:08:35.257 回答