Yii2框架提供App接口,post请求入口文件

     通常Yii2用来写web应用,非常轻松,无论从思想上,和易用性上,都是非常理想的选择。
     但于在写web框架时,不需要考虑将controller和action作为参数来提交,而是直接写在URL地址中,使用get方式去请求得到响应,使用场景就比较限制。
     因为controller 和 action会一直变化,app客户端又希望可以将url中不变的部分,单独抽离出来放到底层方法里,所以就有可能要将controller或action本身作为参数来get或者post请求。
     注意,通常所说Yii2由于Csrf限制不能post指的是action中的post,而实际上,往action中post参数是非常容易实现的。本文中提到的post,是post控制器ID 和 action 的ID给框架的入口文件。

本文提供两种思路:

一、通过修改路由解析和生成规则
     由于Yii2框架的入口文件 web\index.php 只做了 生成Application和利用配置参数调用其run方法两个步骤,入口文件本身没有任何接收参数的操作,之后将url地址交给路由解析来查找对应的controller和action。因此,要想通过post来获取controller和action就需要修改底层路由规则。
     这里有相关深入的源码解析,本文不做赘述:Yii2路由

二、自己手写一个入口文件,再交给Yii来处理
     这个方法相对来说,思路清晰,操作简便,在不动源码的情况下,可以完美实现:客户端用post方式提交controller和action乃至其他参数给自己的,获取服务端响应。
注:由于我本身对url做的一点点修改,原来路由参数名r改成了ID
     具体操作方法如下:
     ①自己新建一个入口文件index.php

    
    function toUrl($url){
            //初始化curl
            $ch = curl_init($url) ;
            // 获取数据返回
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ;
            // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
            curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ;
            //输出返回的参数
            echo curl_exec($ch) ;
    }

    function html($controllerid,$actionid,$paramArr){
        //基础路由拼接url
        $url = "http://api.xxxx.cn/entry.php?ID=".$controllerid."/".$actionid;
        //先遍历获取参数,这里没有校验参数,偷懒了,参考者请自觉补充
        for($i=0;$i$paramArr);$i++){
            $paramName = $paramArr[$i];                  //获取参数名
            $paramValue = $_REQUEST[$paramName];         //获取参数值
            $url = $url."&".$paramName."=".$paramValue;  //拼接url地址
        }
        //用curl 做get请求
        toUrl($url);
    }

    //接收客户端post过来的参数ID
    $ID = $_REQUEST['ID'];

    //根据参数,做curl跳转到Yii2的入口文件
    switch($ID){
        case 'creditplace':
            $paramArr = array('token');
            html('userbase',$ID,$paramArr);
        break;
        ......
    ?>

     ②修改Yii原本的入口文件web\index.php 文件名为:entry.php,代码本身不做修改。

另外,Yii2还提供了使用Restful写app接口,具体,我学习和使用后再做更新。

你可能感兴趣的:(Yii2框架)