วันจันทร์ที่ 11 มีนาคม พ.ศ. 2556

[Yii] วิธีทำการบังคับผู้ใช้ให้ Login เข้าระบบก่อน

          ในบางครั้งในการพัฒนาเว็บไซด์ ก็จะมีเงื่อนไขเข้ามาว่า ต้อง Login เข้าระบบก่อนเท่านั้นถึงจะเข้าหน้าต่างๆ ของเว็บไซด์ได้ แล้วสำหรับ Yii ล่ะจะมีวิธีการทำอย่างไร

สิ่งที่เราต้องทำก็คือ

  1. กำหนด Behaviors (หรือก็คือการดัก Event นั้นเอง) ในไฟล์ Config main
  2. สร้าง Component ใหม่โดย Extends มาจาก CBehavior



เริ่มที่ไฟล์ Config ก่อนเลยครับซึ่งจะอยู่ใน Yii Application ของเราใน folder protected\config\ ชื่อไฟล์ main.php  
ทำการเปิดไฟล์ขึ้นมาด้วย Text Editor ของท่านจากนั้นแทรก Code ดังนี้
'behaviors' => array(
'onBeginRequest' => array(
'class' => 'application.components.RequireLogin'
)
),
  • behaviors เป็นการกำหนดการทำงานเมื่อเกิด Event ขึ้น
  • onBeginRequest เป็นการกำหนดการทำงานเมื่อฝั่ง Client มีการ request page มาที่ server หรือ ผู้ใช้มีการเปิดหน้าเว็บไซด์นั้นเอง
  • class เป็นการกำหนดให้ไปเปิดใช้งาน Class ไหนที่ต้องทำงานเมื่อเกิด Event ขึ้น
  • application.components.RequireLogin คือชื่อ Class ที่ถูกใช้งาน

โดยการแทรก Code นั้นต้องแทรกให้อยู่ในระดับนอกสุด ระดับเดียวกันกับ modules หรือ components
 
 ต่อไปคือการสร้าง Component ใหม่ ให้ทำการเข้าไปที่ Yii Application ของเราแล้วไปที่ folder protected\components\ จากนั้นให้ทำการสร้างไฟล์ขึ้นมาชื่อ RequireLogin.php ครับ
 ภายในไฟล์ RequireLogin.php แทรก Code ไว้ตามนี้ครับ
<?php
class RequireLogin extends CBehavior
{
public function attach($owner)
{
$owner->attachEventHandler('onBeginRequest', array($this, handleBeginRequest'));
}
public function handleBeginRequest($event)
{
if (Yii::app()->user->isGuest && !in_array($_GET['r'],array('site/login'))) {
Yii::app()->user->loginRequired();
}
}
}

?> 

  • function attach ใช้ผูกโยง Event กับ Function
  • function handleBeginRequest ใช้ทำงานเมื่อมี Event เกิดขึ้น

$owner->attachEventHandler('onBeginRequest', array($this, handleBeginRequest'));

  •  attachEventHandler คือการกำหนด Function ที่จะทำงานเมื่อเกิด Event ขึ้น
  •  onBeginRequest คือชื่อของ Event ที่เราจะกำหนดการทำงานให้ (จะเป็นชื่อเดียวกับที่อยู่ในไฟล์ Config) 
  • $this ในที่นี้หมายถึง Class นี้ (คือ Class RequireLogin) 
  • handleBeginRequest คือชื่อ Function ที่เราจะให้มันทำงาน
 if (Yii::app()->user->isGuest && !in_array($_GET['r'],array('site/login'))) {
Yii::app()->user->loginRequired();
}
บรรทัดนี้เป็นการตรวจสอบว่าทำการเข้าสู่ระบบหรือยังและได้อยู่ในเพจที่ยกเว้นหรือไม่

  • Yii::app()->user->isGuest เป็นการตรวจสอบว่าเข้าสู่ระบบหรือยัง โดยถ้ายังจะคืนค่ากลับมาเป็น true 
  •  in_array เป็น Function ในการตรวจสอบข้อมูลใน array ว่ามีค่าที่เหมือนกับค่าของตัวแปรอยู่หรือไม่ โดยถ้ามีจะคืนค่าเป็น true
  •  Yii::app()->user->loginRequired() เป็นคำสั่งให้เปลี่ยนเพจไปยังเพจที่ใช้ Login

ไม่มีความคิดเห็น:

แสดงความคิดเห็น