Запись в лог из action контроллеров? Только изучаю Yii и ООП, до этого программировал обычными функциями, поэтому хотел спросить о правильности такой реализации. Я хочу записывать в лог разные действия юзеров на сайте, например при добавление коммента записать в лог. Создал модель Log * @property integer $id * @property integer $created_at * @property string $category * @property integer $user_id * @property string $username * @property string $event и в ней методpublic static function addLog($model) { if(Yii::$app->user->isGuest) return false; $log = new Log(); $log->created_at = time(); $log->user_id = Yii::$app->user->id; $log->username = Yii::$app->user->identity->username; $log->category = $model['category']; $log->event = $model['event']; $log->save(); } в нужных экшинах контроллеров вызываю такif ($model->load(Yii::$app->request->post())) { if($model->save()) { // Отправляем в лог \app\modules\log\models\log::addLog( [ 'category' => 'comments', 'event' => 'Добавлен новый комментарий: ' . $model->post ] ); или это все надо делать по другому?
В целом, ваш подход к записи логов выглядит разумно. Однако, есть несколько улучшений, которые можно внести в ваш код:
Вместо передачи массива в метод addLog, лучше передавать сразу необходимые параметры. Например:public static function addLog($category, $event) { if(Yii::$app->user->isGuest) return false; $log = new Log(); $log->created_at = time(); $log->user_id = Yii::$app->user->id; $log->username = Yii::$app->user->identity->username; $log->category = $category; $log->event = $event; $log->save(); }При вызове метода addLog из контроллера можно сразу передавать необходимые значения:\app\modules\log\models\log::addLog('comments', 'Добавлен новый комментарий: ' . $model->post);
Если вам необходимо записывать логи различных событий с разными параметрами, можно рассмотреть возможность передачи объекта модели в метод addLog вместо массива или простых строк. Это позволит более гибко управлять форматом и содержанием логов.
Кроме того, рассмотрите возможность использования специализированных библиотек для работы с логами, таких как Monolog. Они предоставляют более продвинутые функции записи и обработки логов.
Надеюсь, эти рекомендации помогут вам улучшить свою реализацию записи логов в Yii.
В целом, ваш подход к записи логов выглядит разумно. Однако, есть несколько улучшений, которые можно внести в ваш код:
Вместо передачи массива в метод addLog, лучше передавать сразу необходимые параметры. Например:public static function addLog($category, $event){
if(Yii::$app->user->isGuest)
return false;
$log = new Log();
$log->created_at = time();
$log->user_id = Yii::$app->user->id;
$log->username = Yii::$app->user->identity->username;
$log->category = $category;
$log->event = $event;
$log->save();
}При вызове метода addLog из контроллера можно сразу передавать необходимые значения:\app\modules\log\models\log::addLog('comments', 'Добавлен новый комментарий: ' . $model->post);
Если вам необходимо записывать логи различных событий с разными параметрами, можно рассмотреть возможность передачи объекта модели в метод addLog вместо массива или простых строк. Это позволит более гибко управлять форматом и содержанием логов.
Кроме того, рассмотрите возможность использования специализированных библиотек для работы с логами, таких как Monolog. Они предоставляют более продвинутые функции записи и обработки логов.
Надеюсь, эти рекомендации помогут вам улучшить свою реализацию записи логов в Yii.