cakephp 调用未定义的方法身份验证\控制器\组件\身份验证组件::user()

xxls0lw8  于 2022-11-11  发布在  PHP
关注(0)|答案(1)|浏览(119)

我想只在用户登录时在导航栏中显示“注销”选项,或者只在导航栏中显示主页、登录和注册选项。但它显示了标题中提到的错误
在应用控制器. php中

public function beforeRender(EventInterface $event)
  {
    if (is_object($this->Authentication)) {
        if ($this->Authentication->user() !== null) {
            $this->set("userIsLoggedIn", true);

        } else {
            $this->set("userIsLoggedIn", false);

        }
    }
  }

在nav.php文件中

<?php if(isset($userIsLoggedIn) && $userIsLoggedIn): ?>
        <li class="nav-item">
            <?= $this->Html->link(
                'Logout',
                '/users/logout',
                ['class' => 'nav-link','target' => '_self']
            ); ?>
        </li>
 <?php else: ?>
        <li class="nav-item">
            <?= $this->Html->link(
                'Login',
                '/users/login',
                ['class' => 'nav-link','target' => '_self']
            ); ?>
        </li>

        <li class="nav-item">
            <?= $this->Html->link(
                'Signup',
                '/users/signup',
                ['class' => 'nav-link','target' => '_self']
            ); ?>
        </li>
  <?php endif; ?>
qgelzfjb

qgelzfjb1#

您可能看到了错误的文档,特别是属于CakePHP核心的已弃用Auth组件的文档。
您应该参考新认证插件的文档,其中记录了Authentication组件的使用情况。通过Authentication组件访问用户的方法称为getIdentity

$identity = $this->Authentication->getIdentity();

此外,对于您的特定用例,还有一个视图帮助器,它提供了一种检查用户是否登录的方法。在您的AppView::initialize()方法(src/View/AppView.php)中加载该帮助器:

$this->loadHelper('Authentication.Identity');

然后,您可以在视图模板中使用它的isLoggedIn方法,而无需在控制器中编写更多代码:

<?php if($this->Identity->isLoggedIn()): ?>
    ...
<?php endif; ?>

另请参阅

*身份验证手册〉身份验证组件〉访问登录用户


相关问题