在beforeFilter中,我根据登录的用户为我的默认视图设置了一个变量......这在调用注销操作之前效果很好。
class AppController extends Controller {
var $components = array('Acl', 'Auth', 'Session', 'FcStudentMilestone', 'FcSection');
function beforeFilter(){
$this->set('completed_data', $this->_completedData());
}
function _completedData(){
$arr = array();
$x = strval($this->Auth->user('id'));
$compData = $this->FcStudentMilestone->find('all',
array('conditions' => array(
'FcStudentMilestone.user_id' => $x,
'FcStudentMilestone.completed' => '1')));
foreach ($compData as $compDatum) {
$compString = $this->FcSection->find('all',
array('conditions' =>
array('FcSection.id' =>
$compDatum['FcStudentMilestone']['fc_section_id'])));
array_push($arr, $compString[0]['FcSection']['name']);
}
return $arr;
}
我认为大部分代码都无关紧要,但无论如何它都在那里。发生的事情是,当用户注销时,它仍在尝试在注销发生后执行查询,但Auth组件没有用户ID。
我尝试过使用if($ this-> Auth-> user())或if($ this-> Auth-> user('id'))但仍然返回true并继续尝试执行查询。
这是我得到的错误:Call to undefined method FcStudentMilestoneComponent::find()
我确实在components文件夹中有FcStudentMilestone组件文件,所以我认为它与缺少用户ID有关,但我可能会离开。
另外,注意到错误是指实际的find语句,但是我之前在行中调用了当前用户id,为什么它不会标记该行而不是使用find语句的行?
答案 0 :(得分:1)
所以,也许有人可以解释为什么这是一个修复,但是,
var $components = array('Acl', 'Auth', 'Session', 'FcStudentMilestone', 'FcSection');
当调用注销或登录操作时,FcStudentMilestone组件不继承find()方法。
所以我刚刚添加了一个空白的find()方法,现在可以了。
class FcStudentMilestoneComponent extends Object {
function find(){
}
}
极端困惑,但我只是认为它已修复并继续前进。但是解释会很棒!