您现在的位置是:网站首页>>PHP>>Yii

Yii 请求与响应

发布时间:2019-12-17 09:54:55作者:wangjian浏览量:464点赞量:0

    一:请求

    在Yii中一个应用的请求是用 yii\web\Request 对象来表示的

    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 或者其他的请求方法提交上来的参数。这时候你可以通过调用 yii\web\Request::getBodyParam()方法来获取这些参数

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

    2:请求方法

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

    $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中我们可以通过yii\web\Request 对象获取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中我们可以通过yii\web\Request::$headers属性来获取header头信息的相关信息

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

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

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

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

    二:响应

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

    1:状态码响应

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

     yii\web\Response::$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错误');

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

    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):如果你有一个已经格式化好的响应主题,你一个将其赋值到 yii\web\Response::$content 属性

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

    (2):如果你发送到终端的数据需要进行格式化的话,yii\web\Response::$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中yii\web\Response对象中可以实现发送文件,即将服务器中的指定文件下载到本地,实现下载功能

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

    yii\web\Response::sendFile():发送一个已存在的文件到客户端

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

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

    如:

    (1):yii\web\Response::sendFile()

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

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

    (2):yii\web\Response::sendContentAsFile()

    将指定字符下载到本地

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

    (3):yii\web\Response::sendStreamAsFile()

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

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

0 +1