您现在的位置是:首页 > 文章详情

在yii2中,让你action参数支持POST数据的小方法

日期:2018-09-26点击:730

我们先来看一段代码

class RaController extends Controller { public $enableCsrfValidation = false; public function actionSay($username = '',$city = ''){ echo "{$username} 来自 {$city}"; } } 

这里actionSay对应的url为index.php?r=ra/say,而 $username 和 $city 值的获取来自于url的参数,比如

index.php?r=ra/say&username=abei2017&city=洛阳 

总结 在yii2中,action参数都是来自于GET。

但是有的时候你可能需要让action的参数来自于POST请求,怎么办?

重载runAction即可,yii2为控制器提供了runAction方法,它负责生成一个具体的Action对象并传递参数,我们可以通过复写它来实现,你可以看下yii2的生命周期来对其进行更好的了解。

那就开始干吧~,对上面的代码复写runAction

class RaController extends Controller { public $enableCsrfValidation = false; public function runAction($id, $params = []){ $params = ArrayHelper::merge(Yii::$app->request->post(),$params); return parent::runAction($id, $params); } public function actionSay($username = '',$city = ''){ echo "{$username} 来自 {$city}"; } } 

复写了runAction后,它将作用于此控制器的所有action,当然你也可以通过runAction的$id来作用于某个action。比如

public function runAction($id, $params = []){ if($id == 'say'){ $params = ArrayHelper::merge(Yii::$app->request->post(),$params); } return parent::runAction($id, $params); } 

现在去试试吧,对say动作提交POST数据username和city,成功接收。

原文链接:https://my.oschina.net/abei2017/blog/2208806
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章