在CWebUser中使用仅在登录Yii后出现的自定义属性

时间:2013-04-26 03:10:21

标签: yii

在Yii中,我尝试在导航菜单中创建指向您自己的个人资料的链接。此链接由数据库中的名字和姓氏组成,仅对登录的成员可见。我可以在登录时设置这些。但是我遇到的问题我不知道如何在Yii中纠正,当未登录的成员查看页面时会发生什么。

因为目前它只是错误并抛出:

未定义属性“CWebUser.first_name”。

这是我的菜单设置方式

array(
        'class' => 'bootstrap.widgets.TbButtonGroup',
        'htmlOptions'=>array('class'=>'pull-right'),
        'size'=>'small',
        'type'=>'primary', // '', 'primary', 'info', 'success', 'warning', 'danger' or 'inverse'
        'buttons'=>array(
           array('visible'=> !Yii::app()->user->isGuest, 'label'=>Yii::app()->user->first_name .' '. Yii::app()->user->last_name, 'items'=>array(
           array('label'=>'Profile', 'url'=>array('/site/logout')),
           array('label'=>'Settings', 'url'=>array('/site/something')),
           '---',
           array('label'=>'Logout', 'url'=>array('/site/somethingElse')),
        )))
    ),

我理解它出错的原因,但不知道如何在Yii中纠正这个错误。如果有人能指出我的方向是正确的那么好。

由于

强尼

2 个答案:

答案 0 :(得分:1)

这会产生一些丑陋的代码,但你可以将这个三元运算符放在“label”

!Yii::app()->user->isGuest ? Yii::app()->user->first_name .' '. Yii::app()->user->last_name : '';

这基本上就像这样

boolean_stateent ? if_true_then_this_value : else_use_this_value;

因此,它会检查用户是否不是来宾(也就是已登录),然后打印第一个+姓氏。如果用户是访客,则不会尝试访问first_name和last_name,因此不会抛出任何错误。

答案 1 :(得分:1)

您可以使用自定义WebUser课程(如果您还没有:只需将其从CWebUser扩展并将其配置为user组件)。然后,您可以使用getter作为用户名:

public function getFullName()
{
    return $this->getIsGuest() ? '' : $this->first_name.' '.$this->last_name;
}

在您的菜单中,您可以使用Yii::app()->user->fullName。对于访客用户来说它是空的。