URL - 获取请求参数 ¶
作者:KK
发表日期:2016.12.10
request组件的get post获取参数 ¶
一般都是在控制器里获取请求的参数,很简单,这是靠request组件
来实现的,它是HTTP客户端请求数据的处理组件
既然是这个组件,肯定是 Yii::$app->request
这样写了,它有一个get
方法获取get参数,还有个post
方法也就是获取post参数
比如Yii::$app->request->get('userId')
而Yii::$app->request->get('userId', 223)
就是定义默认值,没有userId就默认返回223
post方法的用法和get是一样的,不过这里先不建议你使用post测试获取先,因为你可能会取不到值,后面有对于POST请求的专门讲解
获取所有参数 ¶
$getParams = Yii::$app->request->get(); //不传参数就返回整个数组
$postParams = Yii::$app->request->post();
新手误区 ¶
假如请求时POST的name值是abc,以下代码企图模拟数据测试时会让新手失望:
$_POST['name'] = 'jay';
echo Yii::$app->request->post('name'); //abc
至于为什么得不到jay,简单地说Yii在初始化的时候就已经装载了参数,你后期修改$_POST或$_GET它也不再自动重新装载
想要重新装载请见相关文章《Yii2 经验分享 - 常见误区 - 企图修改POST数组模拟数据》
题外话:强转保安全 ¶
在安全角度,我对参数处理有要求,因为客户端/浏览器可以欺骗服务端,发送非数字的userId过来,所以根据实际的参数使用逻辑,要做相对应的类型强制转换
比如 $userId = (int)Yii::$app->request->get('userId', 123);
获取不到还好,默认是123
要是获取到一个数组,没有用(int)
做强转的话,后面要是$userId + 789
就会因为数组无法做加法运算而出错了,多几个代码样本:
$isTop = (bool)Yii::$app->request->post('isTop'); //是否置顶,无论post的is_top内容是什么,只要非空就会转成true,否则就转成false
$aUserList = (array)Yii::$app->request->post('userList'); //如果前端要添加用户列表,发来的用户列表数据要转成array才能for循环,就是防止前端发送一个字符串导致for循环报错,但这里for内部也要对item做强转
$age = (int)Yii::$app->request->post('age', 18); //你懂的,就一个年龄,强转成int
$name = (string)Yii::$app->request->post('name', '默认姓名'); //本节完
转好过不转嘛