AuthComponent在某些控制器中不可用?

时间:2012-02-20 16:51:47

标签: cakephp cakephp-2.0

我已经编写了我的蛋糕应用程序来登录注册用户,它在有与用户关联的数据库模型的视图页面上运行良好。但是,在我的主页上不一定访问某些模型(PagesController,其中页面是即将发生的事件,联系我们,等等),AuthComponent不可用,或者至少,数组返回空---所以我无法检索登录人的用户名。

我尝试创建一个名为Page的模型,该模型属于用户,但不能解决我的问题。

为了进一步解释,我的应用程序显示了某个城市的某些住宿,夜总会,餐馆和要做的事情的列表,所有这些都显示用户是否登录。我不明白我哪里出错了,为什么。

这是我的AppController:

<?php
class AppController extends Controller {
 public $components = array(
    'Session',
    'Auth' => array(
        'loginRedirect' => array('controller' => 'users', 'action' => 'view'),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'index')
    )
);


function beforeFilter() {
    $this->Auth->allow('login', 'logout','index', 'view', 'condos', 'houses', 'hotels_and_motels', 'print_all_coupons', 'print_coupon', 'search', 'golf', 'charters', 'events', 'nightlife', 'shopping', 'visitors_info', 'contact_us');

}
}
?>

这是我在默认页面布局中访问用户名的地方:

<?php if(AuthComponent::user('id')) {
        echo '<span style="font-variant:small-caps">Hello, '.AuthComponent::user('username').'</span> | ';
?>

2 个答案:

答案 0 :(得分:3)

我已经找到了答案,经过几个星期的打击我的头在墙上。哦,你会笑的。对于那些在这里遇到这个问题的人来说,答案是.....确保你的标签之前或之后没有空格。就这些。认真。由于PHP打印出不在PHP标记中的所有内容,如果它找到要发送的内容,它将在其他所有内容之前发送标题。发送标头后,无法创建PHP会话。所以把这个粉笔砸到头上的文件!

答案 1 :(得分:0)

没有看到任何代码,我的第一直觉就是说你没有在AppController中加载组件,而只是在UsersController中加载组件。你在AppController中加载Auth组件吗?

<强>更新

以下是我建议访问用户信息的方法。

$this->Session->read('Auth.User.username');

更新2

从Pages Controller中删除$components声明。它可能会超越会议。

更新3

如果您有自定义页面控制器,则可能与Core Pages控制器冲突。删除您的Pages控制器,看它是否正常工作。 Core Pages控制器仍将路由到Views/Pages/目录以显示内容。