sndwow 2016-12-02 10:31:51 5480次浏览 5条回复 1 0 0

YII2提供了方便的Yii::$app->request->get/post函数方便获取相应参数,并在获取失败时设置默认值。 但是在现实情况中,很多场景需要获取很多个参数,例如 $username=Yii::$app->request->get('username'); $goods_id=Yii::$app->request->get('goods_id'); $address=Yii::$app->request->get('address'); $phone=Yii::$app->request->get('phone'); ....

此时就显得代码杂乱(也可能是个人有洁癖)

于是有了以下函数

    /**
     * 功能:获取GET参数,支持批量获取,支持设定默认值,如未设置默认值,将用null作为默认值
     *
     * 键值对数组,例如['username'=>'jack','password']
     * 键表示需要获取的参数名,值表示当参数不存在时使用的默认值。
     * 当只传递值的时候,表示获取$_GET['值']的参数,且当参数不存在时返回null
     *
     * @param array $name
     *
     * @return array
     */
    public function getQuery (array $name)
    {
        $result = [];
        foreach ($name as $key => $val) {
            if (is_numeric($key))
                $result[$val] = isset($_GET[$val]) ? $_GET[$val] : null;
            else
                $result[$key] = isset($_GET[$key]) ? $_GET[$key] : $val;
        }
        
        return $result;
    }

我将此函数写在了自己的Controller基类内,所有Controller继承它,于是以上的参数可以这样获取

$params = $this->getQuery([
            'username' => '张三',//当用户名不存在,默认使用张三
            'goods_id',
            'address',
            'phone',
        ]);

如果需要改成获取POST参数,把以上函数中的$_GET改成$_POST就行了

  • 回复于 2016-12-02 12:33 举报

    个人觉得 获取了 直接转换成数组 更简单吧 yii2中有个 asArray()方法

    1 条回复
    回复于 2016-12-02 13:40 回复

    这个获取也是得到数组,但是主要是可以设置默认值

  • 回复于 2016-12-02 13:47 举报
              好吧  
    
  • 回复于 2016-12-02 18:50 举报

    66 哒。
    但是YII是成熟的,这个应该是可以考虑到的。

    $request = Yii::$app->request;
    
    $a = $request->get('a'); //不存在则返回null
    
    //如果$a不存在需要提供个默认值
    $a = $request->get('a', 2);
    
    1 条回复
    回复于 2016-12-03 16:01 回复

    题目一开始不就是用了request->get麽。O__O "…
    你没看清楚主题哈,主要是批量获取

  • 回复于 2016-12-05 15:38 举报

    对业务独立建立一个model, 在model 的 rules 属性中为获取字段添加 safe 规则。控制器直接调用 $model->load($data)。得到的就是提取到的数据。

    2 条回复
    回复于 2016-12-05 17:18 回复

    这个是主要是用于非model类型,例如datatables的ajax请求,方便获取

    回复于 2016-12-14 10:51 回复

    什么叫非model型? 如果使用你的这个函数如何对输入数据进行过滤与校验呢?

  • 回复于 2019-05-30 16:27 举报

    public function getQuery($parameter,$default){

        $request = Yii::$app->request;
        if($request->isGet){
            $parameter = $request->get($parameter);
        }
        if($request->isPost){
            $parameter = $request->post($parameter);
        }
        if(!$parameter){
            $parameter = $default;
        }
        return $parameter;
    }
    
您需要登录后才可以回复。登录 | 立即注册