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

在CWebUser中使用仅在登录Yii后才存在的自定义属性,yii,Yii,在Yii中,我试图在导航菜单中创建指向您自己的个人资料的链接。此链接由数据库中您的名字和姓氏组成,仅对登录的成员可见。我可以在登录时设置这些罚款。但我不知道如何在Yii中更正的问题是,当未登录的成员查看页面时会发生什么 因为目前它只会出错并抛出: 未定义属性“CWebUser.first_name” 这就是我菜单的设置方式 array( 'class' => 'bootstrap.widgets.TbButtonGroup', 'htmlOptions'=&

在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中更正它。如果有人能给我指出正确的方向那就太好了

谢谢


Jonny

这使得代码有点难看,但您可以将此三元运算符放在“标签”中

基本上是这样的

boolean_stateent ? if_true_then_this_value : else_use_this_value;

因此,它会检查用户是否不是来宾(aka已登录),然后打印名字+姓氏。如果用户是来宾,它不需要尝试访问名字和姓氏,因此不会抛出错误。

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

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

然后在菜单中使用
Yii::app()->user->fullName
。对于来宾用户,它将是空的。

谢谢,我选择了这种方法。
public function getFullName()
{
    return $this->getIsGuest() ? '' : $this->first_name.' '.$this->last_name;
}