调用未定义的方法 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; ?>
另见
我只想在用户登录时在导航栏中显示 '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; ?>
另见