折腾一下框架请求的姿势

来源:互联网 发布:淘宝联盟可以赚钱吗 编辑:程序博客网 时间:2024/05/29 11:11

1.上节课我们已经学会了自定义的控制器
http://localhost/yiiserver/web/index.php?r=user/index/
就可以访问我们的UserController下面的方法actionIndex

2.穿插一个路由知识点
毕竟index.php?r=user/index这种地址太难看了,
通过文档http://www.yiichina.com/doc/guide/2.0/rest-routing,我们做一些改造
config/web.php打开下面代码的注释:

        'urlManager' => [            'enablePrettyUrl' => true,            'showScriptName' => false,            'rules' => [            ],        ],

然后我们就可以这样访问了:http://localhost/yiiserver/web/index.php/user/index/

3.Yii框架表单安全机制
框架会要求你在提交时传入一个参数(这个参数由框架预先生成),你可以放到隐藏文本里,提交时带过去就可以了。
Yii里面这个提交参数叫做_csrf,
生成这个参数可以通过echo \Yii::$app->request->csrfToken;
不过很可惜,这个功能我们API开发用不到,所以直接关掉即可。

    public function init()    {        $this->enableCsrfValidation = false;    }

4.请求格式
默认POST请求,Content-Type的值为application/x-www-form-urlencoded,请求体是以id=3&name=jack这样的形式发送的。
后端这样接收:

      echo \Yii::$app->request->post('id');      echo \Yii::$app->request->post('name');

如果Content-Type是application/json呢?
发送json格式的数据:

{"id":3,"name":"jack"}

后端这样接收:

        $body = file_get_contents("php://input");        echo json_decode($body)->name; //'jack'

这个是PHP原生的方式,但在Yii里我们可以简单配置一下就可以转换了config/web.php

        'request' => [            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation            'cookieValidationKey' => 'xxxooooo',            'parsers' => [                'application/json' => 'yii\web\JsonParser',                'text/json' => 'yii\web\JsonParser' //这种类型,可以也用json解析器            ],        ],

然后后端就可以这样接收数据了:

    function actionIndex()    {//        $body = file_get_contents("php://input");//        echo json_decode($body)->name; //'jack'        echo \Yii::$app->request->post('name');    }
0 0
原创粉丝点击