Yii 2导航小部件可见与可访问

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

我有一个yii\bootstrap\Nav,其中有几个菜单项。其中之一是注销。考虑这两个例子。

    $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