ปกติการรับค่าตัวแปรต่างๆ จากฟอร์มหรือจาก 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 ต่างๆ ที่ส่งมากับ urlbaseUrl
: returns /admin, url ที่ไม่รวม host info และ ค่า parameterscriptUrl
: 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;