cakephp - 用于设置可用导航链接的每个控制器操作的回调函数

时间:2013-09-24 21:51:06

标签: php cakephp

我正在尝试在我的cakephp-app中实现一些基本的东西,我很惊讶我没有轻易找到它的解决方案......

我想要做的是为我的应用程序主导航设置可用链接,具体取决于用户是否登录,如果是,则取决于他的角色(存储在users-table中)。

所以基本上是这样的函数:

if(!$this->request->is('ajax')) {
    if(_user_is_not_logged_in_) {
        $availableNavItems = array('login','help');
        }
    else {
        if($this->Auth->User('role') == 'user') {
            $availableNavItems = array('something','something else','whatever','help','logout');
        }
        elseif($this->Auth->User('role') == 'admin') {
            $availableNavItems = array('something','something else','whatever','admin-tool','user management','help','logout');
        }
    }
    // set available pages for layout
    $this->set('availableNavItems',$availableNavItems);
}

在我的布局当然,我会创建一个导航栏,其中包含指向这些可用页面的链接。

我唯一的问题 - 我会在哪里放置如上所述的代码?是否有任何回调函数我可以放在AppController中哪个cakephp调用每个请求? 而且,检查我上面写的伪代码“_user_is_not_logged_in_”的好方法是什么?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

if(_user_is_not_logged_in_) {

可以写成

if(!$this->Auth->user('id')){

您可以将该函数放在AppController的beforeRender方法中,该方法在每次请求时执行,就在呈现视图之前。

另外值得注意的是beforeFilter方法,它在控制器逻辑执行之前被提前调用。在这种情况下你不应该需要它,但值得了解。