public function beforeAction($action) { /** * @var $user \common\models\User */ $beforeAction = parent::beforeAction($action); if (!\Yii::$app->request->isAjax) { $log = new LogMain(); $log->ip = \Yii::$app->request->getUserIP(); $log->referrer = \Yii::$app->request->getReferrer(); $log->method = \Yii::$app->request->getMethod(); $log->action = $action->id; $log->controller = $this->id; $log->data = \Yii::$app->request->getBodyParams() ? json_encode(\Yii::$app->request->getBodyParams()) : null; $log->url = \Yii::$app->getRequest()->getAbsoluteUrl(); $log->user_id = \Yii::$app->user->getId(); $log->agent = \Yii::$app->request->getUserAgent(); $log->robot = \Yii::$app->request->getIsRobot(); $log->insert(false); } if (!\Yii::$app->user->isGuest) { $user = \Yii::$app->user->identity; //если пользователь не обновлялся более 60 секунд, то обновляем данные в объекте, но не делаем запрос в БД, // вдруг где то в контроллере уже делает апдейт, что бы не делать лишний запрос к БД if ($user->updated_at < time() - Time::SEC_TO_MINUTE) { $user->online = true; $user->created_at = time(); } } return $beforeAction; }
/** * Удаление старыъ записей (сессии, логов) */ public function actionGarbageCollector() { $logMain = LogMain::deleteAll(['<=', 'created', time() - Time::SEC_TO_MONTH]); $session = Session::deleteAll(['<=', 'expire', time() - \Yii::$app->session->getTimeout()]); $this->stdout('- ' . $this->ansiFormat(LogMain::tableName(), Console::FG_YELLOW)); $this->stdout(' '); $this->stdout(Console::wrapText("удалено {$logMain} записей", 10), Console::BOLD); $this->stdout("\n"); $this->stdout('- ' . $this->ansiFormat(Session::tableName(), Console::FG_YELLOW)); $this->stdout(' '); $this->stdout(Console::wrapText("удалено {$session} записей", 10), Console::BOLD); $this->stdout("\n"); }