Cakephp перед фильтром - PullRequest
       5

Cakephp перед фильтром

1 голос
/ 12 января 2011

В 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 не имеет идентификатора пользователя.

Я попытался использовать if ($ this-> Auth-> user ()) или if ($ this-> Auth-> user ('id')), но это все еще возвращает true и продолжает пытаться выполнить запрос.

вот ошибка яполучение: Call to undefined method FcStudentMilestoneComponent::find()

У меня есть файл компонента FcStudentMilestone в папке компонентов, так что я действительно думаю, что это как-то связано с отсутствием идентификатора пользователя, но я могу быть далеко.

Кроме того, заметили, что ошибка относится к фактическому оператору поиска, но я вызываю текущий идентификатор пользователя в строке ранее, так почему бы не отметить эту строку вместо строки с оператором поиска?

1 Ответ

1 голос
/ 12 января 2011

Итак, может быть, кто-то может объяснить, почему это исправление, но,

var $components = array('Acl', 'Auth', 'Session', 'FcStudentMilestone', 'FcSection');

Когда вызывается действие выхода из системы или входа в систему, компонент FcStudentMilestone не наследует метод find ().

Итак, я просто добавил пустой метод find (), и теперь он работает.

class FcStudentMilestoneComponent extends Object {

    function find(){

    }
}

Extremeley сбит с толку, но я просто сочту, что это исправлено, и сейчас пойдем дальше. Но объяснение было бы потрясающим!

...