Логирование (записи что, кто и когда сделал пользователь)

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

Логирование (записи что, кто и когда сделал пользователь)

Сообщение vlvladimir »

Нужно записывать действия пользователя (кто, что и куда сохранил, удалил, заапдейтил).
Думал в сторону beforeAction, но тут надо или описывать в каждом контроллере или унаследоваться от CustomBaseController, а так как я использую сторонние модули вышеуказаный вариант неочень подходит..
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Логирование (записи что, кто и когда сделал пользователь)

Сообщение zelenin »

vlvladimir писал(а):Нужно записывать действия пользователя (кто, что и куда сохранил, удалил, заапдейтил).
Думал в сторону beforeAction
странно думать о контроллере, если логировать хотите состояние объектов моделей
vlvladimir писал(а):но тут надо или описывать в каждом контроллере или унаследоваться от CustomBaseController, а так как я использую сторонние модули вышеуказаный вариант неочень подходит..
по этому никогда и не нужно использовать базовые контроллеры

напишите поведение, внутри делеайте слепок во время AFTER_CONSTRUCT/AFTER_FIND и AFTER_SAVE, разницу записывайте.
vlvladimir
Сообщения: 17
Зарегистрирован: 2014.07.01, 19:02

Re: Логирование (записи что, кто и когда сделал пользователь)

Сообщение vlvladimir »

подключил в common\config

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

      'as LogBehavior' => [
          'class' => \common\components\MyBehavior::className(),
      ], 

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

class MyBehavior extends Behavior{


    public function events()
    {
        return [
            Controller::EVENT_AFTER_ACTION => 'afterAction',
            ActiveRecord::EVENT_AFTER_FIND => 'afterFind',
        ];
    }

    public function afterAction(){
        echo 'afterAction work';
    }

    public function afterFind(){
        echo 'find work';
    }

} 
afterAction срабатывает, а вот afterFind нет. (пробывал и другие события для ActiveRecord === та же самая история)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Логирование (записи что, кто и когда сделал пользователь)

Сообщение zelenin »

vlvladimir писал(а):подключил в common\config

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

      'as LogBehavior' => [
          'class' => \common\components\MyBehavior::className(),
      ],

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

class MyBehavior extends Behavior{


    public function events()
    {
        return [
            Controller::EVENT_AFTER_ACTION => 'afterAction',
            ActiveRecord::EVENT_AFTER_FIND => 'afterFind',
        ];
    }

    public function afterAction(){
        echo 'afterAction work';
    }

    public function afterFind(){
        echo 'find work';
    }

}
afterAction срабатывает, а вот afterFind нет. (пробывал и другие события для ActiveRecord === та же самая история)
причем тут afterAction? что вы там собираетесь делать? прочитайте внимательно мой первый коммент.
afterFind вызовется после извлечения записи из базы.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Логирование (записи что, кто и когда сделал пользователь)

Сообщение zelenin »

или вы что хотите логировать? куда зашел человек? тогда afterAction достаточно.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Логирование (записи что, кто и когда сделал пользователь)

Сообщение slavcodev »

Cценарий 1: Логирование изменения моделей.
1) После восстановления из базы, сохраняем атрибуты модели
2) После сохранения новых данных, сохраняем так же разницу с данными из пункта 1 (глянь dirty attributes в Yii2 добавили)

Cценарий 2: Логирование действий пользователей.
1) Перед каждым действием логируем: действие (УРЛ с параметрами) и данные из Request

Вообщем надо определится с задачей конкретнее, что там собрались логировать.
Жду Yii 3!
vlvladimir
Сообщения: 17
Зарегистрирован: 2014.07.01, 19:02

Re: Логирование (записи что, кто и когда сделал пользователь)

Сообщение vlvladimir »

zelenin писал(а):
vlvladimir писал(а):подключил в common\config

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

      'as LogBehavior' => [
          'class' => \common\components\MyBehavior::className(),
      ], 

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

class MyBehavior extends Behavior{


    public function events()
    {
        return [
            Controller::EVENT_AFTER_ACTION => 'afterAction',
            ActiveRecord::EVENT_AFTER_FIND => 'afterFind',
        ];
    }

    public function afterAction(){
        echo 'afterAction work';
    }

    public function afterFind(){
        echo 'find work';
    }

} 
afterAction срабатывает, а вот afterFind нет. (пробывал и другие события для ActiveRecord === та же самая история)
причем тут afterAction? что вы там собираетесь делать? прочитайте внимательно мой первый коммент.
afterFind вызовется после извлечения записи из базы.
В том то и дело, что afterFind не срабатывает. Не срабатывает не одно событие ActiveRecord. А afterAction - это как пример, чтобы проверить срабатывают ли другие событие(в частности события Controller)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Логирование (записи что, кто и когда сделал пользователь)

Сообщение zelenin »

vlvladimir писал(а): В том то и дело, что afterFind не срабатывает. Не срабатывает не одно событие ActiveRecord. А afterAction - это как пример, чтобы проверить срабатывают ли другие событие(в частности события Controller)
а как он может сработать, если он он срабатывает после find() модели, а вы никакой модели не ищете?
vlvladimir
Сообщения: 17
Зарегистрирован: 2014.07.01, 19:02

Re: Логирование (записи что, кто и когда сделал пользователь)

Сообщение vlvladimir »

zelenin писал(а):
vlvladimir писал(а): В том то и дело, что afterFind не срабатывает. Не срабатывает не одно событие ActiveRecord. А afterAction - это как пример, чтобы проверить срабатывают ли другие событие(в частности события Controller)
а как он может сработать, если он он срабатывает после find() модели, а вы никакой модели не ищете?
Наконец до меня дошло. Спасибо. zelenin.
Я думал что в конфиге

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

      'as LogBehavior' => [
          'class' => \common\components\MyBehavior::className(),
      ],  
будет достаточно, чтобы слушать события любой модели.
А надо цеплять поведение конкретно к каждой модели.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Логирование (записи что, кто и когда сделал пользователь)

Сообщение zelenin »

vlvladimir писал(а):
zelenin писал(а):
vlvladimir писал(а): В том то и дело, что afterFind не срабатывает. Не срабатывает не одно событие ActiveRecord. А afterAction - это как пример, чтобы проверить срабатывают ли другие событие(в частности события Controller)
а как он может сработать, если он он срабатывает после find() модели, а вы никакой модели не ищете?
Наконец до меня дошло. Спасибо. zelenin.
Я думал что в конфиге

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

      'as LogBehavior' => [
          'class' => \common\components\MyBehavior::className(),
      ],
будет достаточно, чтобы слушать события любой модели.
А надо цеплять поведение конкретно к каждой модели.
верно
Ответить