调用未定义的方法 Authentication\Controller\Component\AuthenticationComponent::user()

Call to undefined method Authentication\Controller\Component\AuthenticationComponent::user()

我只想在用户登录时在导航栏中显示 'logout' 选项,否则只在导航栏中显示主页、登录和注册选项。但是它显示了标题中提到的这个错误

在AppController.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; ?> 

您可能看错了文档,特别是属于 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; ?> 

另见