Methods 如何在Yii中的所有页面请求中触发方法?

Methods 如何在Yii中的所有页面请求中触发方法?,methods,yii,controller,Methods,Yii,Controller,在我的网站的标题部分,我想显示新的消息。我有一个获取新方法并返回它们的方法。问题是标题部分位于布局部分,我不想在所有控制器中重复一种方法 如何通过不将方法复制到我的所有控制器来实现这一点?我想在每个页面请求上触发newMessages()方法,为登录用户收集新消息。如何正确执行此操作?您可以在另一个控制器操作中使用导入控制器。像下面这样 class AnotherController extends Controller { public function actionIndex()

在我的网站的标题部分,我想显示新的消息。我有一个获取新方法并返回它们的方法。问题是标题部分位于
布局
部分,我不想在所有控制器中重复一种方法


如何通过不将方法复制到我的所有控制器来实现这一点?我想在每个页面请求上触发
newMessages()
方法,为登录用户收集新消息。如何正确执行此操作?

您可以在另一个控制器操作中使用导入控制器。像下面这样

class AnotherController extends Controller
{
    public function actionIndex()
    {
            Yii::import('application.controllers.admin.YourController'); // YourController is another controller in admin controller folder
            echo YourController::test(); // test is action in YourController
     }
 }

在控制器中,覆盖oOntroller类函数beforeAction()

返回值可用于停止处于停滞状态的请求。因此,如果返回false,则不调用控制器操作,反之亦然()


参考资料:

在这种情况下,我必须在所有控制器中的每个操作中放入
Yii::import
。难道没有更好的办法吗?如果我有30个控制器和很多动作方法呢?这是一个错误提示如果您不喜欢使用导入,我建议您使用来自视图文件的AJAX请求…您能给出一个示例,每10秒提取一次新消息吗?谢谢。我已经通过ajax请求处理了它,但您的回答回答了我的问题。;-)
protected function beforeAction($event)
{
    $someResult = doSomething()
    if ($someResult == $someValue)
    {
        return true;         
    }
    else
    {
        return true;         
    }
}