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();

これにより、次のエラーが発生します。

スクリプトは「Phalcon\Mvc\Model\Manager::notifyEvent(): Call to method fire() on a non-object」というメッセージで E_ERROR を発生させました

EventsManager のセットアップで不足しているものは何ですか?

私は Phalcon 1.3.0 を使用しています。

ありがとう、てむり

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 に答える