一:请求
在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();