添加行为
举例子:yii1有通用地获取不论是get还是post的请求
Yii::app->request->getParam('id’)
但是yii2没有,它只有如下:
Yii::$app->request->getQueryParams();//获取get所有参数
Yii::$app->request->getQueryParam('id');//获取get中某个参数
Yii::$app->request->getBodyParams();//获取post所有参数
Yii::$app->request->getBodyParam('id');//获取post中某个参数
那么我可以通过行为绑定一个使之满足:
Yii::$app->request->request();//获取请求的所有参数
Yii::$app->request->request('id');//获取请求的某个参数
步骤:
1、config/web.php 添加这个行为
2、项目根目录下新建一个文件夹,命名为components或者common,我这里命名为common,里面新建一个类
<?php
namespace app\common;
use yii\base\Behavior;
use yii\helpers\ArrayHelper;
/**
* Class HttpRequstMethod
*
* @$_REQUEST = GET + POST
*/
class HttpRequstMethod extends Behavior
{
private static $_data = [];
public function request($name = null)
{
$request = \Yii::$app->request;
if (!self::$_data)
{
self::$_data = ArrayHelper::merge($request->getBodyParams(), $request->getQueryParams());
}
return self::$_data[$name] ?? self::$_data;
}
}
3、为了支持输入Yii::$app->request->自动补全列表里有request,项目根目录/widgets下新建_ide_helper.php
<?php
namespace yii\web{
use app\common\HttpRequstMethod;
/**
* Class Request
*
* @mixin HttpRequstMethod
* @mixin Request
* @package yii\web
*/
class Request {}
}
到此,任何地方都可以通过如下通用地调用所有请求参数或者某个请求参数了!
Yii::$app->request->request();//获取请求的所有参数
Yii::$app->request->request('id');//获取请求的某个参数