Requests và Responses trong Yii2

0
1273

Requests trong yii2

Requests gửi 1 yêu cầu đến website của chúng ta nhằm yêu cầu website cung cấp thông tin từ website đến với người dùng như header,thông tin hữu ích ,cookies .

1.1 Các thông số trong requests

Ở ví dụ dưới đây bạn sẽ thấy việc yêu cầu các thông số như nào

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

$get = $request->get();
// giống code trong php: $get = $_GET;

$user_id = $request->get('user_id');
// giống code trong php: $user_id = isset($_GET['user_id']) ? $_GET['user_id'] : null;

$user_id = $request->get('user_id', 1);
// giống code trong php: $user_id = isset($_GET['user_id']) ? $_GET['user_id'] : 1;

$post = $request->post();
// giống code trong php: $post = $_POST;

$name = $request->post('name');
// giống code trong php : $name = isset($_POST['name']) ? $_POST['name'] : null;

$name = $request->post('name', '');
// giống code trong php: $name = isset($_POST['name']) ? $_POST['name'] : '';

Mình hay dùng 2 loại này

$user_id = $request->get('user_id', 1);

$name = $request->post('name', '');

Để đảm bảo yếu tố bảo mật

1.2 Các phương thức request

Có 4 phương thức request đó là Ajax ,Put,Get,Post .Chúng ta có thể check chúng với hàm request

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

if ($request->isAjax) { /* code */ }
if ($request->isGet)  { /* code */ }
if ($request->isPost) { /* code */ }
if ($request->isPut)  { /* code */ }

1.3 Request URLs

Request có thể cung cấp nhiều cách kiểm tra các thành phần request đến server như link đến server hoặc các thành phần trên link url .Có các cách check như sau .Bạn có thể xem ở code như sau : ví dụ link :http://localhost/demoyii2/frontend/web/demo.html

echo Yii::$app->request->getUrl();
// get url không hoàn chỉnh /demoyii2/frontend/web/demo.html
echo Yii::$app->request->getabsoluteUrl();
// get url hoàn chỉnh :http://localhost/demoyii2/frontend/web/demo.html
echo Yii::$app->request->gethostInfo();
// get thông tin host :http://localhost
echo Yii::$app->request->getpathInfo();
//get path info :demo.html
echo Yii::$app->request->getqueryString();
// get đoạn mã query :/demoyii2/frontend/web
echo Yii::$app->request->getbaseUrl();
// lấy thông tin domain : localhost
echo Yii::$app->request->getserverName();
// rõng vì server ko có 
echo Yii::$app->request->getserverPort();
// cổng web : 80

1.4 HTTP Headers

Bạn có thể lấy thông tin header khi website trả về cho người dùng thông qua hàm

$headers = Yii::$app->request->headers;
$accept = $headers->get('User-Agent');

Nhằm lấy thông tin người dùng đã đến website ,trình duyệt người dùng …

1.5 Thông tin người dùng

Bạn có thể lấy được 2 thông tin người dùng đó là ip và host người dùng

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

2 Responses trong yii2

Responses trong yii2 xử lý các quá trình liên quan đến trả dữ liệu về người dùng .Ở phần này chúng ta sẽ tìm hiểu các phần sau :

2.1 Status Code

Yii::$app->response->statusCode = 200;

Ở đây chúng ta có thể can thiệp quá trình gửi mã code báo về cho client .Nói chung status này chúng ta rất ít dùng

2.2 Trả về dữ liệu HTTP Headers

Chúng ta can thiệp vào phần header của layout trả về bằng cách như sau :

$headers = Yii::$app->response->headers;

// thêm Pragma header. Nếu tồn tại Pragma headers thì sẽ ko viết đè lên
$headers->add('Pragma', 'no-cache');

// thêm Pragma header .Mọi Pragma tồn tại sẽ bị discarded 
$headers->set('Pragma', 'no-cache');

// xóa bỏ Pragma 
$values = $headers->remove('Pragma');

2.3 Response Body

Thường chúng ta sẽ response bằng phương thức render ,bên cạnh đó bạn có thể response như sau :

Yii::$app->response->content = 'hello world!';

2.4 Chuyển hướng

Chúng ta dễ dàng chuyển hướng người dùng mà ko ảnh hưởng đến seo bằng dòng code

  return $this->redirect('http://example.com/new', 301);

2.5 Send File

Gửi file cho người dùng dễ dàng với send file .Thường kết hợp với ajax trong website

public function actionDownload()
{
    return \Yii::$app->response->sendFile('path/to/file');
}

Vậy là bạn đã có thể tận dụng tối đa sức mạnh request và responses với website của mình với những kiến thức trên .Có gì khó hiểu bạn hãy comment phía dưới để mình giải đáp