2014-12-09 2 views
0

В старой версии Yii эта часть NavBar кода работает, пока пользователь не вошел в систему.Yii2/нав бар/Скрытие свойство не-объекта

array('label'=>Yii::t('ge',Yii::app()->user->name), 'url'=>array('/site/index'), 'visible'=>!Yii::app()->user->isGuest), 

В Yii2

['label' => Yii::$app->user->identity->username, 'url' => ['site/index'], 'visible'=>!Yii::$app->user->isGuest], 

Броски «Попытка получить свойство не-объекта» означает, что объект Yii::$app->user->identity->username не существует.

Как исправить эту проблему? И почему старая версия работает нормально?

ответ

1

Вы должны просто использовать:

'label' => Yii::$app->user->isGuest ? 'Guest' : Yii::$app->user->identity->username 

Или распространяется \yii\web\User справиться с этим.

В Yii2:

@property IdentityInterface | нуль $ идентичность Объект идентичности, связанный с вошедшего в систему пользователя. null возвращается, если пользователь не вошел в систему (не аутентифицирован).

В Yii1, CWebUser указано имя по умолчанию. Вы можете задать эту функцию для Yii2 здесь: https://github.com/yiisoft/yii2/issues

EDIT: если вы просто хотите, чтобы скрыть этот пункт меню для гостей, добавьте это к вашему вопросу:

'visible' => !Yii::$app->user->isGuest, 
+0

Но если я хочу, чтобы скрыть это метка полностью, если пользователь не вошел в систему? – David

+0

Тогда вам не нужно создавать пункты меню ... – soju

+0

Я имею в виду, что в вашем ответе эти пункты меню создаются и показывают имя гостя или имя пользователя в зависимости от шага IF. Но в старом yii весь пункт меню имел опции, чтобы показать себя или нет в зависимости от статуса входа пользователя. Так можно ли полностью не показывать этот пункт меню, если пользователь является гостем? – David