Не могу разобратся с ивентами

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
dev1coolboy1
Сообщения: 30
Зарегистрирован: 2012.11.26, 19:43

Не могу разобратся с ивентами

Сообщение dev1coolboy1 »

Читал документацию, но так и не понял принцип работы ивентов.
Например мне надо сделать чтобы после логина в бд изменялось поле с датой последней авторизации пользоветля. Хочу сделать это красиво, через behaviors.
Подскажите как правильно активировать ивент EVENT_LOGIN, чтобы все сработало

Код: Выделить всё

class User extends ActiveRecord implements IdentityInterface
{
    const EVENT_LOGIN = 'login';

    public function login()
    {
        $user = $this->findUserByEmail();
        if($user) {
            if($user->status == self::STATUS_ACTIVE) {
                $user->save(); //Для сохранения результата работы ивента
                return Yii::$app->user->login($user, 3600*24*30);
            } elseif($user->status == self::STATUS_INACTIVE) {
                $this->addError('password', 'Ваш аккаунт не активирован');
            } else {
                $this->addError('password', 'Ваш аккаунт заблокирован');
            }
        }
        return false;
    }

    public function behaviors()
    {
        return [
            'timestamp' => [
                'class' => 'yii\behaviors\TimestampBehavior',
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['registered_at'],
                    self::EVENT_LOGIN => ['logged_at'] // Хочу чтобы сработал этот ивент
                ],
            ],
        ];
    }
} 
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не могу разобратся с ивентами

Сообщение zelenin »

после логина вызвать триггер этого события
https://github.com/yiisoft/yii2/blob/ma ... ng-events-
dev1coolboy1
Сообщения: 30
Зарегистрирован: 2012.11.26, 19:43

Re: Не могу разобратся с ивентами

Сообщение dev1coolboy1 »

я понял в чем ошибся. я пробовал вызывать тригер через $this, а объект то у меня $user. спасибо за ответ
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Не могу разобратся с ивентами

Сообщение yiijeka »

behaviors и "ивенты" это разные вещи, пока не поймёте это, красиво не получится сделать... ;)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не могу разобратся с ивентами

Сообщение zelenin »

yiijeka писал(а):behaviors и "ивенты" это разные вещи, пока не поймёте это, красиво не получится сделать... ;)
ну так он и не смешивает нигде понятия.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Не могу разобратся с ивентами

Сообщение yiijeka »

Хочу сделать это красиво, через behaviors.
Подскажите как правильно активировать ивент EVENT_LOGIN, чтобы все сработало
:geek: ;)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не могу разобратся с ивентами

Сообщение zelenin »

поведение привязывается к событию. теперь это событие нужно создать. все ок.
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Re: Не могу разобратся с ивентами

Сообщение fly2k »

интересно, попробовал тоже сделать... только у меня есть еще updated_at и оно тоже срабатывает (на EVENT_BEFORE_UPDATE) каждый раз при логине(ибо там $user->save() делается)
а как добавить условие например по сценарию, типа если сценарий login - меняем тока logged_at, если сценарий другой(update|create) то меняем и created_at && updated_at
// Yii2Rulez!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не могу разобратся с ивентами

Сообщение zelenin »

fly2k писал(а):интересно, попробовал тоже сделать... только у меня есть еще updated_at и оно тоже срабатывает (на EVENT_BEFORE_UPDATE) каждый раз при логине(ибо там $user->save() делается)
а как добавить условие например по сценарию, типа если сценарий login - меняем тока logged_at, если сценарий другой(update|create) то меняем и created_at && updated_at
и в чем загвоздка?
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Re: Не могу разобратся с ивентами

Сообщение fly2k »

zelenin писал(а):
fly2k писал(а):и в чем загвоздка?
так а я вообще не понимаю как... ведь все логично, при каждом $model->save() будет EVENT_BEFORE_UPDATE... и как сделать чтобы save при логине не либо не выплевывал EVENT_BEFORE_UPDATE, либо чтобы как то в поведении про timestamp указать, например сценарий. В доках чет не нашел как. У меня щас так:

Код: Выделить всё

    public function behaviors()
    {
        return array_merge(parent::behaviors(),
            [
                'timestamp' => [
                    'class' => TimestampBehavior::className(),
                    'attributes' => [
                        self::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
                        self::EVENT_BEFORE_UPDATE => ['updated_at'],
                        self::EVENT_LOGIN => ['logged_at'],
                    ],
                ],
            ]
        );
    }

может я чего то не знаю? :) в какую сторону вообще копать: сохранять при логине как то "молча"(без EVENT_BEFORE_UPDATE) или же использовать сценарии как то?
// Yii2Rulez!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не могу разобратся с ивентами

Сообщение zelenin »

вариантов куча. например

Код: Выделить всё

$attributes = [];
if ($this->scenario == 'login') {
$attributes[] = self::EVENT_LOGIN => ['logged_at'];
}
if ( ... ) {
...
}
return array_merge(parent::behaviors(),
            [
                'timestamp' => [
                    'class' => TimestampBehavior::className(),
                    'attributes' => $attributes
                ],
            ]
        );

 
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Re: Не могу разобратся с ивентами

Сообщение fly2k »

zelenin писал(а):вариантов куча. например
спасибо! все никак не могу привыкнуть к простоте и доступности каких то вещей в Yii :) после друпала как то кажется что на каждый чих нада тонны доков перечитать и несколько костылей запилить Ж)
// Yii2Rulez!
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Re: Не могу разобратся с ивентами

Сообщение fly2k »

только конструкция типа:

Код: Выделить всё

$array[] = $key => $value;
не работает :)
// Yii2Rulez!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не могу разобратся с ивентами

Сообщение zelenin »

fly2k писал(а):только конструкция типа:

Код: Выделить всё

$array[] = $key => $value;
не работает :)
опечатался, конечно c[a] = b
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не могу разобратся с ивентами

Сообщение zelenin »

и, да, это не yii, а php. Судя по тому, что вы не поняли, как испраивть мою опечатку, у вас и с php проблемы.
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Re: Не могу разобратся с ивентами

Сообщение fly2k »

zelenin писал(а):и, да, это не yii, а php. Судя по тому, что вы не поняли, как испраивть мою опечатку, у вас и с php проблемы.
к чему такая сурьёзность? :) я так то еще при чтении ответа заметил ошибку, мне просто стало любопытно... искренне, так как мне бы мой внутренний парсер не позволил такую конструкцию написать - очень она глаз режет... а учитывая, что пишет человек создающий впечатление далеко не нуба, я подверг сомнению моё понимание - может я просто не знал что такие конструкции предусмотрены... вот и проверил. И, да, для меня это не является проблемой. Я просто решил в топике это обозначить, чтобы не вводить в заблуждение будущих читателей. Обратите внимание, это всё вместо каких либо поспешных и безапелляционных выводов об авторе опечатки и его проблемах с пхп, несмотря на имеющиеся для этого предпосылки :)

как говорится, будь проще - к тебе люди потянутся ;)

ЗЫ. По сути вопроса - еще раз спасибо! Но по форме - рекомендую при посте спрашивать себя: отвечаете ли Вы по сути, реально помогая кому то, или же проявляете своё раздражение подчеркивая свою важность и превосходство... И, да, это нужно Вам :) Это не моя прихоть - я к таким вещам стараюсь спокойно относиться. Это прежде всего улучшит Вашу жизнь: волосы станут шелковистыми а сил для игры и роста будет еще больше :D

ЗЗЫ. Сорре за офтопик. Моя не удержалась :)
// Yii2Rulez!
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Не могу разобратся с ивентами

Сообщение yiijeka »

@fly2k после "шелковистыми" запятую пропустили.
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Re: Не могу разобратся с ивентами

Сообщение fly2k »

yiijeka писал(а):@fly2k после "шелковистыми" запятую пропустили.
балин, так у меня не тока с пхп проблемы, а еще и по русским языкам :) ну так то да, чёт я расчувствовался чутка, признаю... мир, дружба, жувачка!
// Yii2Rulez!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не могу разобратся с ивентами

Сообщение zelenin »

fly2k писал(а):
zelenin писал(а):и, да, это не yii, а php. Судя по тому, что вы не поняли, как испраивть мою опечатку, у вас и с php проблемы.
к чему такая сурьёзность? :) я так то еще при чтении ответа заметил ошибку, мне просто стало любопытно... искренне, так как мне бы мой внутренний парсер не позволил такую конструкцию написать - очень она глаз режет... а учитывая, что пишет человек создающий впечатление далеко не нуба, я подверг сомнению моё понимание - может я просто не знал что такие конструкции предусмотрены... вот и проверил. И, да, для меня это не является проблемой. Я просто решил в топике это обозначить, чтобы не вводить в заблуждение будущих читателей. Обратите внимание, это всё вместо каких либо поспешных и безапелляционных выводов об авторе опечатки и его проблемах с пхп, несмотря на имеющиеся для этого предпосылки :)

как говорится, будь проще - к тебе люди потянутся ;)

ЗЫ. По сути вопроса - еще раз спасибо! Но по форме - рекомендую при посте спрашивать себя: отвечаете ли Вы по сути, реально помогая кому то, или же проявляете своё раздражение подчеркивая свою важность и превосходство... И, да, это нужно Вам :) Это не моя прихоть - я к таким вещам стараюсь спокойно относиться. Это прежде всего улучшит Вашу жизнь: волосы станут шелковистыми а сил для игры и роста будет еще больше :D

ЗЗЫ. Сорре за офтопик. Моя не удержалась :)
ой-ой-ой.
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Re: Не могу разобратся с ивентами

Сообщение fly2k »

zelenin писал(а):ой-ой-ой.
ну лана, лана... я, видимо, действительно занудно разумничался, и, получается, сам не следую своим советам... стыжусь :oops:
надеюсь, я могу и в дальнейшем расчитывать на Вашу помощь? обещаю не заострять внимание на опечатках :)
// Yii2Rulez!
Ответить