@Oversec

Как реализовать историю изменений заявок в Yii2?

Появилась такая необходимость отслеживать кто как меняет заявки. Пока это реализовано так: есть таблица logs, в неё сохраняем при обращении к контролеру для изменения:
public function actionComment()
    {
        $log = new Logs();
        $log->task_id = $id;
        $log->user_id = Yii::$app->user->id;
        $log->time = date('Y-m-d H:i:s');
        $log->new_data = $comment;
        $log->action = 'Комментарий';

        if(!$log->save(false)) {
            return false;
        }

//Далее сохраняем данные


Но действий выполняется много. Есть ли возможность реализовать это более корректно?

Второй вопрос: Как узнать какое поле изменяется в таблице?
  • Вопрос задан
  • 663 просмотра
Решения вопроса 1
qonand
@qonand
Software Engineer
Если Вы хотите реализовать этот функционал более корректно, тогда не стоит его пихать в контроллер т.к. ему там просто не место. Контроллер только должен осуществлять обработку запроса пользователя, взаимодействовать с уровнем бизнес-логики и представлений.
Реализуйте отдельный компонент/поведение, который будет:
1. Ловить события сохранения данных в моделях
2. Получать из этих событий сами объекты записей
3. Вынимать из объекта измененные данные с помощью метода getDirtyAttributes()
4. Собственно формировать объект лога и сохранять его

но перед этим я бы Вам порекомендовал поискать готовые решения, т.к. для этой задачи - они есть
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 06:09
30000 руб./за проект
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект