2016-02-28 17:07:33 4856次浏览 2条回答 0 悬赏 10 金钱

如题;

我用yii2.0构建了一个service层,我调用service的时候对参数进行过签名,在yii2.0的service端获取参数的时候我想先进行相关处理。然后将处理后的参数还原成yii能接受的。具体如下:

yii标准请求地址:
http://host/?r=site/get-userinfo&id=8

签名过的请求地址:
http://host/?r=site/get-userinfo&param=这里是包含了id等相关参数的密文

并且service用的yii内置的RESTful,控制器方法如下:

class SiteController extends \yii\rest\ActiveController{

    public $modelClass = '';

    public function actionGetUserinfo($id) {
        # 相关操作
    }
}

使用标准请求地址是能访问成功的,如何能让我签名过的地址能访问呢,也就是说如何能在调用actionGetUserinfo()方法之前让我去改变$_GET['id']这个值,有没有提供这样的过滤器或者方法。

yii小白一枚,望各位大神不吝赐教。先谢过了!

最佳答案

  • naivefang 发布于 2016-02-29 10:02 举报

    处理参数的核心逻辑在yii\base\Action::runWithParams里面,你可以选择重写这部分,但是这会影响整个框架的所有代码。

    建议是重写控制器的runAction逻辑,实现一个YourActiveController

    public function runAction($id,$params) {
         $params_decrypt = decrypt_params($params);
         return parent::runAction($id,$params_decrpt);
    }
    
    

    然后,相关的逻辑继承这个控制器

    1 条回复
    回复于 2016-02-29 11:23 回复

    大致有了思路,谢谢解答。

  • 回答于 2016-02-29 09:54 举报

    两种方法
    1.写一个behaviour。
    2.重写beforeAction方法,在当前类,或者写个父类继承。

    1 条回复
    回复于 2016-02-29 11:24 回复

    感谢解惑,应该就是这些方法。我先去试试。

您需要登录后才可以回答。登录 | 立即注册
jtLeon
职场新人

jtLeon 上海

注册时间:2016-01-04
最后登录:2018-01-02
在线时长:3小时43分
  • 粉丝0
  • 金钱30
  • 威望0
  • 积分60

热门问题