我有以下代码:
<?php
if (!$this->Auth->user())
{
echo $this->element('header');
}
else
{
echo $this->element('header-bar');
}
?>
在我的视图中,应该为登录用户显示不同的标题,但会抛出以下错误:
Notice (8): Undefined property: View::$Auth [APP/views/layouts/page.ctp, line 17]
Fatal error: Call to a member function user() on a non-object in /Users/cameron/Sites/thehive/app/views/layouts/page.ctp on line 17
我该如何解决这个问题?感谢
答案 0 :(得分:86)
您无需执行$this->set(compact('authUser'));
只在View中使用它:
if ($this->Session->read('Auth.User')){
// do something
}
答案 1 :(得分:49)
自CakePHP 2.x开始:
<?php if (AuthComponent::user('id')): ?>
Logged in as <?= AuthComponent::user('name') ?>
<?php endif; ?>
答案 2 :(得分:30)
注意:另请查看meotimdihia的answer below。它有一个很多的upvotes。
Auth组件用于Controller。您需要在控制器中检查授权,然后为视图设置变量,例如$this->set('authUser', $this->Auth->user());
。然后在您的视图中,您可以执行以下操作:
if (!$authUser)
{
echo $this->element('header');
}
如果您希望自动为所有控制器方法完成此操作,您可以考虑修改cake/libs/controller/app_controller.php
以使其包含Auth组件。
答案 3 :(得分:16)
要总结此页面上的答案,请根据您使用的CakePHP版本评估以下其中一项:
对于版本1.x
$this->Session->read('Auth.User')
对于版本2.x
AuthComponent::user('id')
Fore version 3.x
$this->request->session()->read('Auth.User.id')
答案 4 :(得分:11)
这适用于Cakephp 3+(juts修改:“Auth.User.username”以适合您的会话数据)
<?php
if (is_null($this->request->session()->read('Auth.User.username'))) {
echo "....logged out";
} else {
echo "You are Logged in As " . $this->request->session()->read('Auth.User.username');
}
?>
答案 5 :(得分:5)
我用过CakePHP已经有一段时间,但据我记得CakePHP 在视图中不支持Auth。你可以做的当然是设置一个变量 控制器在视图中使用它
<?
class AppController {
....
function beforeFilter(){
....
$this->set('auth',$this->Auth);
}
....
}
?>
然后在像这样的视图中使用它
$auth->....
或者您可以使用Ritesh Agrawal撰写的AuthHelper
http://bakery.cakephp.org/articles/ragrawal/2008/07/29/authhelper
<强>顺便说一句强>
我认为如果仅测试是否有人登录@ webbiedave的回答 是明智的MVC风格。
然而,如果您必须在视图中访问userdata,则只需提取userinfo 来自Auth组件并在我向您展示时将其设置在控制器中并在视图中使用它
此致
答案 6 :(得分:2)
试试这个
class AppController extends Controller{
$this->user = false;
public function beforeFilter(){
$this->user = $this->Auth->user();
}
public function beforeRender(){
$this->set('logged_user',$this->user);
}
}
现在您可以在视图中检查$ logged_user
if($logged_user){
// users logged in $logged_user have all the details
}else{
// not logged in
}
答案 7 :(得分:2)
if($this->request->Session()->read('Auth.User')){
//do when login
}
else{
//do not login
}
答案 8 :(得分:0)
您需要从控制器设置用户详细信息,最好是您网站上所有控制器继承的AppController。创建/修改app_controller.php以包含此beforeFilter();
方法。
<?php
class AppController extends Controller {
function beforeFilter() {
$user = $this->Auth->user();
$this->set(compact('user'));
}
这将为视图设置名为$user
的var,如果用户未登录则为空,或者如果包含数据,则为空。
答案 9 :(得分:0)
//In the views (or layout)
$session->check('Auth.User.id');
//In controller
$this->Auth->User('id');
答案 10 :(得分:0)
我找到了值得一提的东西,在CakePHP 3.x会话处理程序中已弃用,
如果我们想在视图中访问会话,我们可以通过请求处理程序来完成。我们必须使用
<?php
// For CakePHP 3.x to access all user information
$this->request->session()->read('Auth.User');
// For CakePHP 3.x to check session
if($this->request->session()->read('Auth.User.id')) {
}
?>
答案 11 :(得分:0)
如果它可以帮助cakephp 3.7.8版本中的任何人退出会议,请使用getSession来更新Lee Nielsen的评论
if (is_null($this->request->getSession()->read('Auth.User.username'))) {
echo "....logged out";
} else {
echo "You are Logged in As " . $this->request->getSession()->read('Auth.User.username');
}
答案 12 :(得分:0)
对于 cakephp 4.2.6 Strawberry with Auth 组件
<?php
// Note: Change email param to yours
if (is_null($this->request->getSession()->read('Auth')->email)) {
?>
<?= $this->Html->link(__('Login'), [ 'action' => 'login','controller' => 'Users']) ?>
<?php
} else { ?>
<?= $this->Html->link(__('Logout'), [ 'action' => 'logout','controller' => 'Users']) ?>
<?php }
?>