变得未知 属性:yii\web\User::admin

Getting unknown property: yii\web\User::admin

我是 Yii 2 的新手,我想对非管理员用户隐藏一些导航栏项目。但是,我以某种方式收到一条错误消息,指出用户模型没有这样的 属性 称为 admin.

我很困惑,因为该模型有一个名为 admin 的布尔值属性。我一直在不同的网站上搜索,但到目前为止我似乎找不到解决方案。每当我以用户身份登录时,无论是否是管理员,都会显示导航栏项目。

下面是我在 main.php

中尝试做的事情
<header>
    <?php
    NavBar::begin([
        'brandLabel' => Yii::$app->name,
        'brandUrl' => Yii::$app->homeUrl,
        'options' => [
            'class' => 'navbar navbar-expand-md navbar-dark bg-dark fixed-top',
        ],
    ]);
    echo Nav::widget([
        'options' => ['class' => 'navbar-nav'],
        'items' => [
            ['label' => 'Home', 'url' => ['/site/index']],
            ['label' => 'About', 'url' => ['/site/about']],
            ['label' => 'Contact', 'url' => ['/site/contact']],
            ['label' => 'Team', 'url' => ['/team/index'], 'visible' => Yii::$app->user->admin ? true : false],
            ['label' => 'User', 'url' => ['/user/index'], 'visible' => Yii::$app->user->admin ? true : false],
            Yii::$app->user->isGuest ? (
                ['label' => 'Login', 'url' => ['/site/login']]
            ) : (
                '<li>'
                . Html::beginForm(['/site/logout'], 'post', ['class' => 'form-inline'])
                . Html::submitButton(
                    'Logout (' . Yii::$app->user->identity->username . ')',
                    ['class' => 'btn btn-link logout']
                )
                . Html::endForm()
                . '</li>'
            )
        ],
    ]);
    NavBar::end();
    ?>
</header>

我不明白为什么 Yii::$app->user->admin 不起作用。

我也试过Yii::$app->user->getIdentity('admin'),但还是不行。正如我上面所说,用户模型确实有一个名为 admin 的属性,它具有布尔值。

非常感谢任何帮助。

那是因为 Yii::$app->user 不是您的用户模型的实例。它是 yii\web\User 组件的实例。

如果您按照指南进行操作,您已经让您的用户模型实现 yii\web\IdentityInterface 并将模型 class 设置为 identityClass 然后您可以访问用户模型 Yii::$app->user->identityYii::$app->user->getIdentity().

因此,要访问用户模型的管理员 属性,您必须这样做 Yii::$app->user->identity->adminYii::$app->user->getIdentity()->admin.