yii2如何获取当前url的controller和action?

natici 1231232 2016-12-21 02:40:02
基础模板,backend是模块,user是controller,index是action
例如:http://www.abc.com/backend/user/index

我在user controller的init()里面var_dump(\Yii::$app->controller->action->id); 报错,提示Trying to get property of non-object
在非init()方法里面是可以正常获取的,但这不是我想要的,我是想每一个方法里面都获取当前action id,但不想每个action里面都写一遍这行代码。请高手帮忙
...全文
145 点赞 收藏 4
写回复
4 条回复
natici 2016年12月28日
感谢回答! 我在这个版块也就提了2个问题,没有哪里都是我吧。。。因为这个版块不活跃,21号提的问题一直在第一条问题。
回复 点赞
Edrupal 2016年12月23日
还有为什么这个版块哪里都是你。。。。。。。
回复 点赞
Edrupal 2016年12月23日
引用 1 楼 YiXian_Qing 的回复:
你应该好好看一下yii2的源码,Application.php这个类中没有action属性,只有controller属性,当然会报错。 针对你的问题你可以通过事件或者行为来实现,举例来说:通过行为 1:定义一个行为

namespace backend\behaviors;


use yii\base\Behavior;

class Test extends Behavior
{
    public function events()
    {
        return ['beforeAction'=>'test'];
    }
    public function test($event){
        echo \Yii::$app->controller->action->id;
    }
}
2:如果是应用级别的(也就是所有控制器全部),那么就在配置文件中绑定此行为,如果是针对某个控制器,那么就通过behaviors方法绑定此行为 以上就是你想要的了
上面说的Application.php这个类中没有action属性,只有controller属性,当然会报错,这句话是有前提的,在应用没有run之前是不存在的,你最好看一下yii2的流程
回复 点赞
Edrupal 2016年12月23日
你应该好好看一下yii2的源码,Application.php这个类中没有action属性,只有controller属性,当然会报错。 针对你的问题你可以通过事件或者行为来实现,举例来说:通过行为 1:定义一个行为

namespace backend\behaviors;


use yii\base\Behavior;

class Test extends Behavior
{
    public function events()
    {
        return ['beforeAction'=>'test'];
    }
    public function test($event){
        echo \Yii::$app->controller->action->id;
    }
}
2:如果是应用级别的(也就是所有控制器全部),那么就在配置文件中绑定此行为,如果是针对某个控制器,那么就通过behaviors方法绑定此行为 以上就是你想要的了
回复 点赞
发动态
发帖子
Framework
创建于2008-08-27

3767

社区成员

4535

社区内容

国内外优秀PHP框架讨论学习
社区公告
暂无公告