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