ปกติการรับค่าตัวแปรต่างๆ จากฟอร์มหรือจาก url เราก็จะใช้ $_POST,$_GET เพื่อเรียกใช้งาน แต่ใน yii 2 นั้นมี component ไว้ให้ใช้เหมือนกัน ซึ่งนั่นก็คือ Request

ข้อดีก็คือมันสามารถกำหนดค่า default ให้เราได้เลยในกรณีที่เรารับค่าแล้วมันเป็นค่าว่าง เราสามารถระบุค่า default ให้มันเลยได้

ลองดูโค้ดปกติ หากเราไม่ได้ใช้ Request

<?php
$id = isset($_GET['id']) ? $_GET['id'] : null;

ถ้าดูตามโค้ดด้านบนคือ สร้างตัวแปรชื่อ $id ไว้รอเก็บค่า $_GET['id'] ถ้ามีค่าก็จะได้ค่า$_GET['id'] กลับไปแต่ถ้าไม่มีจะได้ค่าป็น null

ถ้าเป็น Yii 2 ก็จะเรียกสั้นแบบนี้

 $id = Yii::$app->request->get('id');

ในกรณีที่ไม่มีค่าเราสามารถระบุค่า default ให้มันได้ ปกติจะเป็นค่า null ตัวอย่างระบุเป็นค่า 0

 $id = Yii::$app->request->get('id',0);

ตัวอย่างการใช้งานแบบต่างๆ

request สามารถเรียกค่าได้ทั้ง POST,GET

 <?php

 $id = Yii::$app->request->get('id');
// เขียน php ปกติ : $id = isset($_GET['id']) ? $_GET['id'] : null;

$id = Yii::$app->request->get('id', 1);
// เขียน php ปกติ : $id = isset($_GET['id']) ? $_GET['id'] : 1;

$post = Yii::$app->request->post();
// เขียน php ปกติ : $post = $_POST;

$name = Yii::$app->request->post('name');
// เขียน php ปกติ : $name = isset($_POST['name']) ? $_POST['name'] : null;

$name = Yii::$app->request->post('name', '');
// เขียน php ปกติ : $name = isset($_POST['name']) ? $_POST['name'] : '';

Request Methods

เราสามารถเช็คได้ว่าค่าที่ส่งมา เป็น method อะไร

<?php
$request = Yii::$app->request;

if ($request->isAjax) { /* ตรวจสอบว่าเป็น ajax */ }
if ($request->isGet)  { /*  ตรวจสอบว่าเป็น GET */ }
if ($request->isPost) { /* ตรวจสอบว่าเป็น POST */ }
if ($request->isPut)  { /* ตรวจสอบว่าเป็น PUT */ }

Request URLs

เราสามารถตรวจสอบ url ปัจจุบันที่เราใช้งาน ตัวอย่างนี้สมมุติว่าเรากำลังอยู่ที่ url http://example.com/admin/index.php/product?id=100

เราสามารถใช้ request เพื่อเรียกใช้งาน method ต่างๆ ได้ดังนี้

  • url: returns /admin/index.php/product?id=100, ได้ค่า url แต่ไม่มี host info.
  • absoluteUrl: returns http://example.com/admin/index.php/product?id=100, ได้ค่า url และ host info.
  • hostInfo: returns http://example.com, .
  • pathInfo: returns /product, which is the part after the entry script and before the question mark (query string).
  • queryString: returns id=100, ค่า parameter ต่างๆ ที่ส่งมากับ url
  • baseUrl: returns /admin, url ที่ไม่รวม host info และ ค่า parameter
  • scriptUrl: returns /admin/index.php, url ที่รันไฟล์ปัจจุบันและรวมชื่อไฟล์ด้วย
  • serverName: returns example.com, ชื้อของ host ที่ใช้อยู่ ณ ปัจจุบัน
  • serverPort: returns 80, port ที่ใช้อยู่ ณ ปัจจุบัน

ตัวอย่างการเรียกใช้งาน

<?PHP
$request = Yii::$app->request;
echo $request->url;
echo $request->absoluteUrl;
echo $request->hostInfo;
echo $request->pathInfo;
echo $request->queryString;
echo $request->baseUrl;
echo $request->scriptUrl;
echo $request->serverName;

Client Information

คุณสามารถดูค่า Hostname และ ip เครื่องได้โดยใช้ userHost,userIP

<?php

$userHost = Yii::$app->request->userHost;
$userIP = Yii::$app->request->userIP;