[ Yii ตอนที่ 18 ] การเก็บ Log ลง SQL Database บน Yii Framework
เว็บไซท์ในทุกๆเว็บ ควรจะมีการเก็บ Log ต่างๆของ User ในทุกการกระทำไม่ว่าจะเป็น Login, Logout, Update profile, Create, Delete
บทความนี้จะสอนเกี่ยวกับ การ เก็บ Log ของ Action ต่างๆ ครับ
ซึ่ง code ในบทความนี้ผมออกแบบเอง หากผิดพลาดประการใด ขออภัยด้วยนะครับ
1. สร้าง Table ใน Database
2. สร้าง Class Log ใน protected/components/Log.php
Script จะมีการเก็บค่า username, url address, ip address, log type, log date และ Full text ใช้ในการเก็บรายละเอียดเชิงลึก
วิธีนำไปใช้ก็ง่ายๆครับ
ใชกับไฟล์ที่อยู่ใน protected/controllers
ทุกครั้งที่มีการกระทำอะไรก็ตาม เช่น update profile
เราก็กำหนด log_type เป็น UpdateProfile
ตัวแปล $reference ใช้ในการเก็บค่าอย่างละเอียด
ตัวอย่างการนำไปใช้ในการเก็บ Log Update Profile
อันนี้เป็นตัวอย่างในไฟล์ protected/controllers/SiteController.php
บทความนี้จะสอนเกี่ยวกับ การ เก็บ Log ของ Action ต่างๆ ครับ
ซึ่ง code ในบทความนี้ผมออกแบบเอง หากผิดพลาดประการใด ขออภัยด้วยนะครับ
1. สร้าง Table ใน Database
CREATE TABLE IF NOT EXISTS `log` ( `log_id` smallint(6) NOT NULL AUTO_INCREMENT, `username` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `url_address` tinytext COLLATE utf8_unicode_ci NOT NULL, `ip_address` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `log_type` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `log_date` datetime NOT NULL, `log_fulltext` text COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`log_id`), KEY `fk_tb_log_user1_idx` (`username`), KEY `fk_tb_log_log_type1_idx` (`log_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;
2. สร้าง Class Log ใน protected/components/Log.php
Script จะมีการเก็บค่า username, url address, ip address, log type, log date และ Full text ใช้ในการเก็บรายละเอียดเชิงลึก
<?php class Log { // public static function datethai( ตัวแปรที่รับ ) {} public static function save_log($url_address,$log_type,$reference) { $username=Yii::app()->user->username; //$url_address=$this->getId(); $ip_address=$_SERVER['REMOTE_ADDR']; //$log_type=$this->getAction()->getId(); $log_date=date('Y-m-d H:i:s'); //$reference=$this->logMessage; // function: insert('ชื่อตาราง', array('ชื่อ Fields' => 'ข้อมูลที่ต้องการ')); $conn = Yii::app()->db->createCommand() ->insert('log', array( 'username' => $username, 'url_address' => $url_address, 'ip_address' => $ip_address, 'log_type' => $log_type, 'log_date' => $log_date, 'log_fulltext' => 'User '.$username.' '.$log_type.' [ '.$reference.' ] "'.$url_address.'" From '.$ip_address, )); return "Log Saved"; }
วิธีนำไปใช้ก็ง่ายๆครับ
ใชกับไฟล์ที่อยู่ใน protected/controllers
ทุกครั้งที่มีการกระทำอะไรก็ตาม เช่น update profile
เราก็กำหนด log_type เป็น UpdateProfile
ตัวแปล $reference ใช้ในการเก็บค่าอย่างละเอียด
// save Log $url_address=$this->getId(); $log_type='UpdateProfile'; $reference='UserID='.Yii::app()->user->user_id.' '.$model->firstname.' '.$model->lastname.' '.$model->telephone; // echo ชื่อ class :: ชื่อ function( ตัวแปรส่งค่า ); Log::save_log($url_address,$log_type,$reference);
ตัวอย่างการนำไปใช้ในการเก็บ Log Update Profile
อันนี้เป็นตัวอย่างในไฟล์ protected/controllers/SiteController.php
/** * Displays the profile page */ public function actionUpdateProfile() { $model=$this->loadModel(Yii::app()->user->user_id); // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if(isset($_POST['ProfileUser'])) { $model->attributes=$_POST['ProfileUser']; if($model->save()){ Yii::app()->user->setFlash('updateProfile','อัพเดทข้อมูลเสร็จสมบูรณ์'); // save Log $url_address=$this->getId(); $log_type='UpdateProfile'; $reference='UserID='.Yii::app()->user->user_id.' '.$model->firstname.' '.$model->lastname.' '.$model->telephone; // echo ชื่อ class :: ชื่อ function( ตัวแปรส่งค่า ); Log::save_log($url_address,$log_type,$reference); $this->refresh(); } } $this->render('updateprofile',array( 'model'=>$model, )); }
ไม่มีความคิดเห็น:
แสดงความคิดเห็น