我正在创建一个用户个人资料页面,如果我像这样路由
Router::connect('/users/profile', array('controller' => 'users', 'action' => 'profile'));
然后$ this-> Auth-> user()在UsersController->个人资料()中运行正常但是如果它像这样
Router::connect('/pages/profile', array('controller' => 'pages', 'action' => 'profile'));
然后它不在PagesCotroller-> profile()中,两种情况下的配置文件功能相同
我的app控制器:
class AppController extends Controller {
var $components = array(
'Auth' ,
'Acl',
'Session',
'Cookie'
);
var $userdata = array();
function beforeFilter(){
$this->Auth->userModel = 'Users';
$this->Auth->loginRedirect = array();
$this->Auth->allow('display');
$this->Auth->allow('index');
var_dump($this->Auth->user());
parent::beforeFilter();
}
function isAuthorized() {
return true;
}
}
和var_dump实际上如果我去/ users / profile并且如果我去/ pages / profile则不行 没有任何额外的登录或任何
$ this-> Auth-> allow()顺便在两个控制器中正常工作,因此Auth组件可用于
这是pagescontroller
class PagesController extends AppController {
var $components = array('RequestHandler');
var $name = 'Pages';
var $helpers = array('Html', 'Session','Form','Ajax', 'Jquery');
var $uses = array('Users');
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('profile');
}
function beforeRender() {
parent::beforeRender();
}
function profile(){
var_dump($this->Auth->user());
}
}
答案 0 :(得分:1)
尤金,
我想知道为什么你会尝试实现这样的目标。 第一条路线已经存在,因此无需设置一条路线。 第二条路线似乎(imho)违反惯例。页面控制器用于提供或多或少的静态页面,因此我不希望看到它被路由到一个动作。
我的两分钱。
<强> Edit0:强> 在您的第一次评论之后,您的意图现在更加明显:
放
if ($this->Session->read(Auth.User)) ...
或page
中的类似内容,可能作为元素。只需通过debug()
查看您在视图/页面中可以阅读的值。
<强> EDIT1:强>
<强> EDIT2:强>
您可以检查会话是否在除用户之外的其他视图中可见。但是你应该明确地知道,在以复数和表格命名模型时,你正在破坏CakePHP的约定。不幸的是,我不能告诉你atm这是否与手头的情况有关,但我肯定会努力摆脱它。
debug_kit是否显示AUTH组件?
答案 1 :(得分:1)
我发现答案是验证码组件。它每次调用时都会启动会话,并且除了用户之外,它会从所有控制器调用。因此,用户登录数据未被保留。
答案 2 :(得分:0)
我想知道var $ uses = array('Users'); 用户应该是单数,用户
如果这不能解决它...无论如何都要保持单数,因为你正在调用'用户'模型。