Yii 2导航小部件可见与可访问
我有一个yii\bootstrap\Nav,其中有几个菜单项。其中之一是注销。考虑这两个例子。Yii 2导航小部件可见与可访问,yii,yii2,yii2-advanced-app,Yii,Yii2,Yii2 Advanced App,我有一个yii\bootstrap\Nav,其中有几个菜单项。其中之一是注销。考虑这两个例子。 $menuItems = [ [ 'label' => 'Logout ('. Yii::$app->user->identity->username. ')', 'url' => ['/site/logout'], 'linkOpt
$menuItems = [
[
'label' => 'Logout ('. Yii::$app->user->identity->username. ')',
'url' => ['/site/logout'],
'linkOptions' => ['data-method' => 'post'],
'visible' => !Yii::$app->user->isGuest,
],
]
vs
我的应用程序因以下错误而崩溃:
Trying to get property of non-object
在Yii的线上::$app->user->identity->username。
我使用了第二种解决方案,效果很好,但您能否解释为什么代码绕过第一个块的“visible”参数执行。在第二种情况下,您检查的不是来宾,这意味着
Yii::$app->user
是正确的对象,然后您可以访问用户名
首先,您只使用visible menuitem属性,如doc mean中所述
$items详细信息
可见:布尔值,可选,此菜单项是否可见。
默认为true
这意味着该属性管理菜单项的隐藏或显示。但在这种情况下,用户的代码保持不变,因此基于来宾没有装箱正确的用户对象这一事实,您在第一个代码块中有访问空对象属性的错误
Yii::$app->user->identity->username
换成
(Yii::$app->user)?(“注销”(((Yii::$app->user->identity->username”):“登录”
注意:相应地更改url
。配置时不需要可见性
如果没有登录用户
Yii::$app->user->identity->username
语句无法返回username
,因为不存在用户标识(Yii::$app->user->identity
为null
)如果将设置为false
而不是!Yii::$app->user->isGuest
会发生什么情况?我得到了相同的错误,似乎即使它不可见,它仍然会执行。因此,如果没有登录用户,它会抛出异常。讨论第一种情况:如果菜单项不可见,为什么它关心Yii:$app->user的存在?如果菜单不可见,代码也会执行…特别是行..执行'label'=>'注销('.Yii::$app->user->identity->username'),以确定项目的标签..即使它没有显示出来..希望很明确。。
Yii::$app->user