@EVOSandru6

Как в Yii2 в поведении не получается попасть в onBeforeSave?

Добрый день,

Есть поведение, которое подключаю в модели:

...
public function behaviors()
    {
        return [
            [
                'class'=>LogBehavior::classname()
            ]
        ];
    }
...
public function beforeSave($insert)
    {

        echo 'Сюда тоже не поапдаю(';
        die;

        if($insert) {
            $this->user_id = Yii::$app->user->id;
        }
        return parent::beforeSave($insert); // TODO: Change the autogenerated stub
    }


LogBehavior:

...
public function attach($owner)
    {
        parent::attach($owner);

        $owner->on(ActiveRecord::EVENT_BEFORE_INSERT,[$this,'onBeforeSave']);
        $owner->on(ActiveRecord::EVENT_BEFORE_UPDATE,[$this,'onBeforeSave']);
        $owner->on(ActiveRecord::EVENT_AFTER_INSERT,[$this,'onAfterSave']);
        $owner->on(ActiveRecord::EVENT_AFTER_UPDATE,[$this,'onAfterSave']);
        $owner->on(ActiveRecord::EVENT_AFTER_DELETE,[$this,'onAfterDelete']);

...
}

public function onBeforeSave()
    {
        echo 'Сюда не попадаю, При сохранении модели эта запись не отображается';
        die;
 }
...


Только если я явно задаю параметры для модели, тогда попадаю в beforeSave модели:

$model = new Results();
        $model->option_id = $this->option_id;

        $time = time();
        $model->date_create = date('Y-m-d H:i:s',$time);
        $model->date_update = date('Y-m-d H:i:s',$time);
        $model->date_update_stamp = $time;
        $model->date_create_stamp = $time;
        $model->author_id = Yii::$app->user->id;
        $model->exist = 1;
        $model->sort = 1;
       if(!$model->save()) {
            echo $model->printErrors();
        } else {
            echo 'ok';
        }
        die();


Как так? Я же дожен попадать в beforeSave ( далее в onBeforeSave) до сохранения модеди перед валидацией.

Поучается, что если я явно не указываю доп. аттрибуты из листинга выше, то $model->printErrors() ругается на то, что аттрибуты не являются целыми числами. Хотя данные аттрибуты не обязательны к заполнению.

В чем может быть проблема? В attach?
  • Вопрос задан
  • 446 просмотров
Пригласить эксперта
Ответы на вопрос 1
Tairesh
@Tairesh
Веб-программист
К событиям привязываться в attach не стоит, лучше сделать так:
public function events()
    {
        return [
            ActiveRecord::EVENT_BEFORE_INSERT => 'onBeforeSave',
            ActiveRecord::EVENT_BEFORE_UPDATE => 'onBeforeSave',
        ];
    }

А по сути вопроса, мой хрустальный шар говорит что у вас просто ничего не сохраняется, валидация например не проходит, или вы некорретно переопределили метод ActiveRecord::save или ещё что-нибудь такое. Пользуйтесь отладчиком!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы