Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Мне требуется добавить функционал журнала активности - список всех изменений проекта ( такой-то пользователь сделал то-то и так, по всем действиям всех юзеров данного проекта). Все записи хранятся в БД в виде 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)
Не в сети
обычно изменение состояния записи нельзя однозначно описать только по факту самого изменения. имеет значение логика, приведшая к этим изменениям – это может быть как действие пользователя, событие по расписанию, какие-то ручные изменения могут быть – мне кажется с точки зрения логирования имеет значение именно происхождение изменений. так что на событиях модели например логирование делать наверное не очень разумно
потом – что делать с логированием изменений не связанных с проектами? что делать с логированием изменений затрагивающих несколько проектов (групповые действия)? мне кажется тут можно придумать что-то более универсальное
Не в сети
обычно изменение состояния записи нельзя однозначно описать только по факту самого изменения. имеет значение логика, приведшая к этим изменениям – это может быть как действие пользователя, событие по расписанию, какие-то ручные изменения могут быть – мне кажется с точки зрения логирования имеет значение именно происхождение изменений. так что на событиях модели например логирование делать наверное не очень разумно
потом – что делать с логированием изменений не связанных с проектами? что делать с логированием изменений затрагивающих несколько проектов (групповые действия)? мне кажется тут можно придумать что-то более универсальное
Мне нужно лишь реализовать "Активность в проекте". Записывать требуется лишь CRUD операции. Т.е. это будет являться лишь информационной сводкой для владельца/участников конкретного проекта. Групповых действий нет, и по задумке быть не может, также действий по расписанию писать не нужно, лишь действия пользователей. Вот единственное, что следует выделять - какое изменение сделано (прим. Василий изменил поле "название" с "один" на "два" и т.д.). Вот только выдумать, как это лучше сделать - не могу... Возможно есть какие-то готовые решения, приближенные к моей задумке?
Изменено StasStas (15.04.2017 18:17:37)
Не в сети
если все изменения выполняются через модель, достаточно перехватить её события, некоторые из них выполняются до применения изменений и на них доступны как исходный так и обновлённый набор значений – можно получить какие именно меняются – Model::getDirty() – и записать в лог
Не в сети
если все изменения выполняются через модель, достаточно перехватить её события, некоторые из них выполняются до применения изменений и на них доступны как исходный так и обновлённый набор значений – можно получить какие именно меняются – Model::getDirty() – и записать в лог
А с точки зрения архитектуры? Где лучше производить само логирование, не в контроллере же логику писать. К примеру - создать провайдер "ProjectActivityProvider", в нем вести перехват created, updated и т.д., и там-же производить запись лога?
Изменено StasStas (17.04.2017 22:07:20)
Не в сети
может быть. можно ещё на model observers посмотреть – это как раз подходящий способ их применения
Не в сети