在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中纠正这个错误。如果有人能指出我的方向是正确的那么好。
由于
强尼
答案 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
。对于访客用户来说它是空的。