Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP检查用户是否登录到视图中_Php_Cakephp - Fatal编程技术网

CakePHP检查用户是否登录到视图中

CakePHP检查用户是否登录到视图中,php,cakephp,Php,Cakephp,我有以下代码: <?php if (!$this->Auth->user()) { echo $this->element('header'); } else { echo $this->element('header-bar'); } ?> 我该如何解决这个问题?谢谢注意:还可以查看meotimdihia的。它获得了大量的选票 Auth组件用于控制器中。您

我有以下代码:

    <?php

    if (!$this->Auth->user())
    {
        echo $this->element('header');
    }
    else
    {
        echo $this->element('header-bar');
    }

    ?>

我该如何解决这个问题?谢谢

注意:还可以查看meotimdihia的。它获得了大量的选票


Auth组件用于控制器中。您需要检查控制器中的授权,然后为视图设置一个变量,例如,
$this->set('authUser',$this->Auth->user())。在您看来,您可以执行以下操作:

if (!$authUser)
{
    echo $this->element('header');
}

如果您希望对所有控制器方法自动执行此操作,您可以研究修改
cake/libs/controller/app_controller.php
,使其包含Auth组件。

我已经有一段时间使用了CakePHP,但就我所记得的CakePHP而言 视图中不支持身份验证。当然,您可以在 控制器以在视图中使用它

<?
   class AppController {
     ....
     function beforeFilter(){
       ....
       $this->set('auth',$this->Auth);
     }
     ....
   }
?>
也可以使用Ritesh Agrawal编写的AuthHelper

顺便说一句

我想如果只测试是否有人登录了@webbiedave的答案 更好的MVC风格

然而,如果您必须访问视图中的userdata,只需提取userinfo 从Auth组件,并在控制器中设置它,正如我向您展示的那样,并在视图中使用它

<?
   class AppController {
     ....
     function beforeFilter(){
       ....
       $this->set('auth',$this->Auth);
     }
     ....
   }
?>

关于

您需要从控制器设置用户详细信息,最好是从整个站点的所有控制器继承的AppController。创建/修改您的app_controller.php以包含此
beforeFilter()方法

<?php
class AppController extends Controller {

function beforeFilter() {
    $user = $this->Auth->user();
    $this->set(compact('user'));
}

您不需要执行
$this->set(compact('authUser')
仅在视图中使用此选项:

if ($this->Session->read('Auth.User')){
// do something 
}
从CakePHP 2.x开始:

<?php if (AuthComponent::user('id')): ?>
   Logged in as <?= AuthComponent::user('name') ?>
<?php endif; ?>

登录为
试试这个

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\u user作为

if($logged_user){
  // users logged in $logged_user have all the details
}else{
  // not logged in
}
这适用于CakePHP3+(juts修改:“Auth.User.username”以适合您的会话数据)


要总结本页上的答案,请根据您使用的CakePHP版本评估以下选项之一:

对于1.x版

$this->Session->read('Auth.User')
对于2.x版

AuthComponent::user('id')
对于3.x版

$this->request->session()->read('Auth.User.id')
对于版本4.x,使用


在CakePHP3中,您可以在如下视图中检查身份验证会话

$auth->....
if($this->request->Session()->read('Auth.User')){
//do when login
}
else{
 //do not login
}

我发现值得一提的是,在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')) {

  }
?>

如果它对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'); 

}

beforeFile应该是beforefilter这在CakePHP 2.x中已经过时了!!用耶萨尔的答案<代码>$this->Session
-但除此之外,我会选择这种方法!如果您为不同的用户操作(即未经验证的访问)提供不同的视图,您不应该只提供不同的视图吗?这在CakePHP 2.x中已经过时了!!用耶萨尔的答案!!从CakePHP 2.x开始,这已经过时了!!用耶萨尔的答案!!对于CakePHP 3,这会导致一个致命错误,但是
$this->Session->read
对您应该使用的实际代码给出了一个不推荐的警告,就像@LeeNelson的一样,我不明白为什么CakePHP中的所有函数和方法都会频繁更改。您学习了cake 2.4,然后3.0提供了所有新语法。非常烦人。嘿,RN Kushwaha,CakePHP跟随PHP,有一个PHP7,你在那个版本中使用了所有的新东西吗?CakePHP 1.x到2.x只会让事情变得更好,CakePHP 3是一个全新的框架,从零到复杂再到名称空间,以及语言中的所有新功能。@RNKushwaha同样的事情也发生在code igniter、laravel和yii身上。。我们必须经常关注最新的情况technology@aswzen我理解这一点,但我的观点是,必须有一些包装器函数需要更新。因此,每当发生更改时,我们只需要更新包装器函数。注意,从CakePHP 4+开始,您可能必须使用
getRequest()
getSession()
。无论哪种方式,Get-me错误:从布局中使用时调用未定义的方法App\View\AppView::getRequest(),
request
getRequest()
cakephp4怎么样?
if($this->request->Session()->read('Auth.User')){
//do when login
}
else{
 //do not login
}
<?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')) {

  }
?>
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'); 

}