Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 14.04.2017 18:06:27

Каким образом писать лог всех действий пользователей?

Мне требуется добавить функционал журнала активности - список всех изменений проекта ( такой-то пользователь сделал то-то и так, по всем действиям всех юзеров данного проекта). Все записи хранятся в БД в виде id|project_id|description.

Я пока думаю сделать примерно такой ивент:

        'App\Events\ProjectPropertyChanged' => [
            'App\Listeners\CreatedThingOne',
            'App\Listeners\DeletedThingOne',
            'App\Listeners\UpdatedThingOne',
            'App\Listeners\CreatedThingTwo'
            //и т.д.
        ],

Верен ли такой подход, или в данном случае есть другой - более верный с точки зрения архитектуры вариант?

Изменено StasStas (14.04.2017 18:13:34)

Не в сети

#2 15.04.2017 17:11:02

Re: Каким образом писать лог всех действий пользователей?

обычно изменение состояния записи нельзя однозначно описать только по факту самого изменения. имеет значение логика, приведшая к этим изменениям – это может быть как действие пользователя, событие по расписанию, какие-то ручные изменения могут быть – мне кажется с точки зрения логирования имеет значение именно происхождение изменений. так что на событиях модели например логирование делать наверное не очень разумно

потом – что делать с логированием изменений не связанных с проектами? что делать с логированием изменений затрагивающих несколько проектов (групповые действия)? мне кажется тут можно придумать что-то более универсальное

Не в сети

#3 15.04.2017 18:16:52

Re: Каким образом писать лог всех действий пользователей?

constb пишет:

обычно изменение состояния записи нельзя однозначно описать только по факту самого изменения. имеет значение логика, приведшая к этим изменениям – это может быть как действие пользователя, событие по расписанию, какие-то ручные изменения могут быть – мне кажется с точки зрения логирования имеет значение именно происхождение изменений. так что на событиях модели например логирование делать наверное не очень разумно

потом – что делать с логированием изменений не связанных с проектами? что делать с логированием изменений затрагивающих несколько проектов (групповые действия)? мне кажется тут можно придумать что-то более универсальное

Мне нужно лишь реализовать "Активность в проекте". Записывать требуется лишь CRUD операции. Т.е. это будет являться лишь информационной сводкой для владельца/участников конкретного проекта. Групповых действий нет, и по задумке быть не может, также действий по расписанию писать не нужно, лишь действия пользователей. Вот единственное, что следует выделять - какое изменение сделано (прим. Василий изменил поле "название" с "один" на "два" и т.д.). Вот только выдумать, как это лучше сделать - не могу... Возможно есть какие-то готовые решения, приближенные к моей задумке?

Изменено StasStas (15.04.2017 18:17:37)

Не в сети

#4 16.04.2017 05:46:13

Re: Каким образом писать лог всех действий пользователей?

если все изменения выполняются через модель, достаточно перехватить её события, некоторые из них выполняются до применения изменений и на них доступны как исходный так и обновлённый набор значений – можно получить какие именно меняются – Model::getDirty() – и записать в лог

Не в сети

#5 17.04.2017 22:04:11

Re: Каким образом писать лог всех действий пользователей?

constb пишет:

если все изменения выполняются через модель, достаточно перехватить её события, некоторые из них выполняются до применения изменений и на них доступны как исходный так и обновлённый набор значений – можно получить какие именно меняются – Model::getDirty() – и записать в лог

А с точки зрения архитектуры? Где лучше производить само логирование, не в контроллере же логику писать. К примеру - создать провайдер "ProjectActivityProvider", в нем вести перехват created, updated и т.д., и там-же производить запись лога?

Изменено StasStas (17.04.2017 22:07:20)

Не в сети

#6 18.04.2017 05:36:20

Re: Каким образом писать лог всех действий пользователей?

может быть. можно ещё на model observers посмотреть – это как раз подходящий способ их применения

Не в сети

Подвал раздела