| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | <?php/** * Created by PhpStorm. * User:  NODELOG * Date: 16/7/25 * Time: 下午12:25 */namespace backend\behaviors;use common\models\AdminLog;use Yii;use yii\base\Application;use yii\base\Behavior;use yii\base\Event;use yii\db\ActiveRecord;use yii\helpers\Url;class AdminLogBehavior extends Behavior{    public function events()    {        return [            Application::EVENT_BEFORE_REQUEST => 'handle'        ];    }    public function handle()    {        Event::on(ActiveRecord::className(), ActiveRecord::EVENT_AFTER_UPDATE, [$this, 'log']);        Event::on(ActiveRecord::className(), ActiveRecord::EVENT_AFTER_INSERT, [$this, 'log']);        Event::on(ActiveRecord::className(), ActiveRecord::EVENT_AFTER_DELETE, [$this, 'log']);    }    public function log($event)    {        //未登录不保存日志        if($event->sender instanceof AdminLog || !$event->sender->primaryKey() || Yii::$app->user->isGuest) {            return;        }        if ($event->name == ActiveRecord::EVENT_AFTER_INSERT) {            $description = "%s新增了表%s %s:%s的%s";        } elseif($event->name == ActiveRecord::EVENT_AFTER_UPDATE) {            $description = "%s修改了表%s %s:%s的%s";        } else {            $description = "%s删除了表%s %s:%s%s";        }        if (!empty($event->changedAttributes)) {            $desc = '';            foreach($event->changedAttributes as $name => $value) {                $desc .= $name . ' : ' . $value . '=>' . $event->sender->getAttribute($name) . ',';            }            $desc = substr($desc, 0, -1);        } else {            $desc = '';        }        $userName = !Yii::$app->user->isGuest ?  Yii::$app->user->identity->username : '未登录用户';        $tableName = $event->sender->tableSchema->name;        $description = sprintf($description, $userName, $tableName, $event->sender->primaryKey()[0], is_array($event->sender->getPrimaryKey()) ? current($event->sender->getPrimaryKey()) : $event->sender->getPrimaryKey(), $desc);        $route = Url::to();        $userId = !Yii::$app->user->isGuest ?  Yii::$app->user->id : 0;        $ip = ip2long(Yii::$app->request->userIP);        $data = [            'route' => $route,            'description' => $description,            'user_id' => $userId,            'ip' => $ip        ];        $model = new AdminLog();        $model->setAttributes($data);        $model->save();    }}
 |