Yii2 导航小部件可见且可访问
Yii 2 nav widget visible vs accessible
我有一个 yii\bootstrap\Nav,其中有几个菜单项。其中之一是注销。考虑这两个例子。
$menuItems = [
[
'label' => 'Logout ('. Yii::$app->user->identity->username. ')',
'url' => ['/site/logout'],
'linkOptions' => ['data-method' => 'post'],
'visible' => !Yii::$app->user->isGuest,
],
]
对
if (!Yii::$app->user->isGuest) {
$menuItems[] =
[
'label' => 'Logout ('. Yii::$app->user->identity->username. ')',
'url' => ['/site/logout'],
'linkOptions' => ['data-method' => 'post'],
];
}
我的应用程序因
的错误而崩溃
Trying to get property of non-object
在Yii::$app->user->identity->username这一行。
我使用第二种解决方案,效果很好,但是你能解释一下为什么代码执行时绕过第一个块的 'visible' 参数吗?
在第二种情况下,您检查不是客人,这意味着
Yii::$app->user
是正确的对象,然后您可以访问用户名
首先,您只使用可见的菜单项属性,如 doc mean
中所述
http://www.yiiframework.com/doc-2.0/yii-widgets-menu.html#$items-detail
Visible: boolean, optional, whether this menu item is visible.
Defaults to true.
这意味着该属性管理菜单项的隐藏或显示。但是在这种情况下,用户的代码保持不变,因此基于来宾没有创建正确的用户对象这一事实,您无法访问空对象的属性
在您的第一个代码块中
Yii::$app->user->identity->username
改为
(Yii::$app->user)?("Logout(".(Yii::$app->user->identity->username.")"):'Login'
注意: 相应地更改 url
。不需要配置可见性。
如果没有登录用户Yii::$app->user->identity->username
语句不能returnusername
因为没有用户身份存在(Yii::$app->user->identity
是null
)
我有一个 yii\bootstrap\Nav,其中有几个菜单项。其中之一是注销。考虑这两个例子。
$menuItems = [
[
'label' => 'Logout ('. Yii::$app->user->identity->username. ')',
'url' => ['/site/logout'],
'linkOptions' => ['data-method' => 'post'],
'visible' => !Yii::$app->user->isGuest,
],
]
对
if (!Yii::$app->user->isGuest) {
$menuItems[] =
[
'label' => 'Logout ('. Yii::$app->user->identity->username. ')',
'url' => ['/site/logout'],
'linkOptions' => ['data-method' => 'post'],
];
}
我的应用程序因
的错误而崩溃Trying to get property of non-object
在Yii::$app->user->identity->username这一行。 我使用第二种解决方案,效果很好,但是你能解释一下为什么代码执行时绕过第一个块的 'visible' 参数吗?
在第二种情况下,您检查不是客人,这意味着
Yii::$app->user
是正确的对象,然后您可以访问用户名
首先,您只使用可见的菜单项属性,如 doc mean
中所述http://www.yiiframework.com/doc-2.0/yii-widgets-menu.html#$items-detail
Visible: boolean, optional, whether this menu item is visible. Defaults to true.
这意味着该属性管理菜单项的隐藏或显示。但是在这种情况下,用户的代码保持不变,因此基于来宾没有创建正确的用户对象这一事实,您无法访问空对象的属性
在您的第一个代码块中
Yii::$app->user->identity->username
改为
(Yii::$app->user)?("Logout(".(Yii::$app->user->identity->username.")"):'Login'
注意: 相应地更改 url
。不需要配置可见性。
如果没有登录用户Yii::$app->user->identity->username
语句不能returnusername
因为没有用户身份存在(Yii::$app->user->identity
是null
)