Yii 请求与响应

一:请求

在Yii中一个应用的请求是用 yiiwebRequest 对象来表示的

1:请求参数

(1):get传参

$request = \Yii::$app->request;  
//获取get传参的所有参数  
$get = $request->get();  
//获取get传参的指定参数  
$id = $request->get('id');  
//获取get传参的指定参数,无传参设置默认值  
$id = $request->get('id', 1);  

(2):post传参

$request = \Yii::$app->request;  
//获取post传参的所有参数  
$post = $request->post();  
//获取post传参的指定参数  
$id = $request->post('id');  
//获取post传参的指定参数,无传参设置默认值  
$id = $request->post('id', 1); 

(3):获取所有传参方式的参数

我们经常需要获取通过 PUT, PATCH 或者其他的请求方法提交上来的参数。这时候你可以通过调用 yiiwebRequest::getBodyParam()方法来获取这些参数

$request = \Yii::$app->request;  
//获取请求的所有参数  
$params = $request->bodyParams;  
//获取请求的指定参数  
$param = $request->getBodyParam('id');  
//获取请求的指定参数,无传参设置默认值  
$param = $request->getBodyParam('id', 1);  

2:请求方法

在Yii中我们可以通过yiiwebRequest 对象知道当前的请求方式是什么

$request = \Yii::$app->request;  
//获取当前请求方式  
$method = $request->method;  
//判断当前请求是否是ajax请求方式  
$isAjax = $request->isAjax;  
//判断当前请求是否是get请求方式  
$isGet = $request->isGet;  
//判断当前请求是否是post请求方式  
$isPost = $request->isPost;  
//判断当前请求是否是put请求方式  
$isPut = $request->isPut;  

3:请求Url

在Yii中我们可以通过yiiwebRequest 对象获取Url相关信息

$request = \Yii::$app->request;  
//获取当前路由不包括主机信息部分的路由  
$url = $request->url;  
//获取当前路由包括主机信息部分的路由  
$absoluteUrl = $request->absoluteUrl;  
//获取当前路由的主机信息部分  
$hostInfo = $request->hostInfo;  
//获取入口脚本后到问号之前的信息  
$pathInfo = $request->pathInfo;  
//获取问号之后的信息  
$queryString = $request->queryString;  
//获取主机信息之后入口脚本之前的信息  
$baseUrl = $request->baseUrl;  
//获取没有路径信息和查询字符串部分  
$scriptUrl = $request->scriptUrl;  
//获取Url中主机名  
$serverName = $request->serverName;  
//获取使用的端口号  
$serverPort = $request->serverPort;  

4:请求header头信息

在Yii中我们可以通过yiiwebRequest::$headers属性来获取header头信息的相关信息

$request = \Yii::$app->request;  
//返回请求的header头信息对象  
$headers = $request->headers;  
//获取指定参数的header头信息  
$accept = $headers->get('Accept');  
//判断致电给参数的header头信息是否存在  
$hasAccept = $headers->has('Accept');  

5::获取客户端相关信息

在Yii中我们还可以通过yiiwebRequest对象 来获取客户端的相关信息

$request = \Yii::$app->request;  
//获取客户端主机名  
$userHost = $request->userHost;  
//获取客户端ip地址  
$userIP = $request->userIP;  

二:响应

当一个应用处理完一个请求之后,这时候应用需要发送一个响应给终端用户,在yii中使用yiiwebResponse对象来处理这些响应

1:状态码响应

$response = \Yii::$app->response;  
//设置响应状态码  
$response->statusCode = 200;  

 yiiwebResponse::$statusCode属性的默认值为200, 如果需要指定请求失败,可抛出对应的 HTTP 异常,如:

throw new NotFoundHttpException('抛出404错误');  
throw new BadRequestHttpException('抛出400错误');  
throw new ConflictHttpException('抛出409错误');  
throw new ForbiddenHttpException('抛出403错误');  
throw new GoneHttpException('抛出410错误');  
throw new MethodNotAllowedHttpException('抛出405错误');  
throw new NotAcceptableHttpException('抛出406错误');  
throw new NotFoundHttpException('抛出404错误');  
throw new ServerErrorHttpException('抛出500错误');  
throw new TooManyRequestsHttpException('抛出429错误');  
throw new UnauthorizedHttpException('抛出401错误');  
throw new UnsupportedMediaTypeHttpException('抛出415错误'); 

如果想抛出的异常不在如上列表中,可创建一个 yiiwebHttpException 异常, 带上状态码抛出

throw new HttpException('402', '抛出402错误'); 

2:响应http的header头信息

$response = \Yii::$app->response;  
//返回响应的header头信息对象  
$headers = $response->headers;  
//增加一个指定的header头信息,该header头信息存在不会覆盖  
$addPragma = $headers->add('Pragma', 'no-cache');  
//设置一个指定的header头信息,该header头信息存在会覆盖  
$setPragma = $headers->set('Pragma', 'no-cache');  
//删除一个指定的header头信息  
$deletePragma = $headers->remove('Pragma');  

3:响应内容

大多数响应应有一个主体存放你想要显示给终端用户的内容

(1):如果你有一个已经格式化好的响应主题,你一个将其赋值到 yiiwebResponse::$content 属性

$response = \Yii::$app->response;  
$response->content = 'test'; 

(2):如果你发送到终端的数据需要进行格式化的话,yiiwebResponse::$format和yii\web\Response::$data属性

$response = \Yii::$app->response;  
//设置响应主体的格式  
$response->format = \yii\web\Response::FORMAT_JSON;  
//响应应用主体  
$response->data = ['message' => 'test'];  

(3):除了使用默认的 response 应用组件,也可创建自己的响应对象并发送给终端用户, 可在操作方法中返回该响应对象

return \Yii::createObject([
    'class' => Response::className(),
    'format' => \yii\web\Response::FORMAT_JSON,
    'data' => [
        'message' => 'test'
    ]
]);

4:发送文件

在Yii中yiiwebResponse对象中可以实现发送文件,即将服务器中的指定文件下载到本地,实现下载功能

发送文件主要用到了下面三种方式

yiiwebResponse::sendFile():发送一个已存在的文件到客户端

yiiwebResponse::sendContentAsFile():发送一个文本字符串作为文件到客户端

yiiwebResponse::sendStreamAsFile():发送一个已存在的文件流作为文件到客户端

如:

(1):yiiwebResponse::sendFile()

将指定地址的指定文件从服务器上下载到本地

$response = \Yii::$app->response;  
$response->sendFile('test.txt')->send();  

(2):yii\webResponse::sendContentAsFile()

将指定字符下载到本地

$response = \Yii::$app->response;  
$response->sendContentAsFile('test','test.txt')->send();

(3):yiiwebResponse::sendStreamAsFile()

将指定文件流从服务器下载到本地

$response = \Yii::$app->response;  
$handle = fopen('test.txt', 'rb');  
$response->sendStreamAsFile($handle, 'test.txt')->send();

你可能感兴趣的:(yii,request)