我有以下代码:
<?php
if (!$this->Auth->user())
{
echo $this->element('header');
}
else
{
echo $this->element('header-bar');
}
?>
Run Code Online (Sandbox Code Playgroud)
在我的视图中,应该为登录用户显示不同的标题,但会引发以下错误:
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
Run Code Online (Sandbox Code Playgroud)
我该如何解决?谢谢
meo*_*hia 88
您不需要$this->set(compact('authUser'));
仅在View中使用它:
if ($this->Session->read('Auth.User')){
// do something
}
Run Code Online (Sandbox Code Playgroud)
jes*_*sal 50
从CakePHP 2.x开始:
<?php if (AuthComponent::user('id')): ?>
Logged in as <?= AuthComponent::user('name') ?>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)
web*_*ave 30
注意:另请参阅以下 meotimdihia的答案.它有很多赞成票.
Auth组件用于Controller.您需要在控制器中检查授权,然后为视图设置变量,例如$this->set('authUser', $this->Auth->user());.然后在您的视图中,您可以:
if (!$authUser)
{
echo $this->element('header');
}
Run Code Online (Sandbox Code Playgroud)
如果您希望为所有控制器方法自动完成此操作,则可以查看修改cake/libs/controller/app_controller.php以使其包含Auth组件.
Mr *_*ver 17
要总结此页面上的答案,请根据您使用的CakePHP版本评估以下其中一项:
对于版本1.x.
$this->Session->read('Auth.User')
Run Code Online (Sandbox Code Playgroud)
对于2.x版
AuthComponent::user('id')
Run Code Online (Sandbox Code Playgroud)
Fore版本3.x.
$this->request->session()->read('Auth.User.id')
Run Code Online (Sandbox Code Playgroud)
小智 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');
}
?>
Run Code Online (Sandbox Code Playgroud)
有一段时间我使用了CakePHP,但据我记忆,CakePHP不支持Auth in View.你当然可以做的是在控制器中设置一个变量,以便在视图中使用它
<?
class AppController {
....
function beforeFilter(){
....
$this->set('auth',$this->Auth);
}
....
}
?>
Run Code Online (Sandbox Code Playgroud)
然后在这样的视图中使用它
$auth->....
Run Code Online (Sandbox Code Playgroud)
或者您可以使用Ritesh Agrawal编写的AuthHelper
http://bakery.cakephp.org/articles/ragrawal/2008/07/29/authhelper
BTW
我认为如果仅测试某人是否登录@ webbiedave的回答是更好的MVC风格.
然而,如果您必须在视图中访问userdata,只需从Auth组件中提取userinfo,并在我向您展示时将其设置在控制器中并在视图中使用它
问候