我的蛋糕有一个奇怪的问题(cake_1.2.0.7296-rc2)。在某些情况下,我的 start()-action 会运行两次,即使只发出了一个请求。
触发器似乎是: - 加载一个对象,如:$this->Questionnaire->read(null, $questionnaire_id);
- 访问 $this-data
loadAvertisement()如果我禁用来自-action的调用start(),则不会发生这种情况。如果我禁用里面的两个电话loadAdvertisement():
$questionnaire = $this->Questionnaire->read(null, $questionnaire_id);
$question = $this->Questionnaire->Question->read(null, $question_id);
......然后它也不会发生。
为什么?
请参阅下面的代码,控制器是“questionnaires_controller”。
function checkValidQuestionnaire($id)
{
    $this->layout = 'questionnaire_frontend_layout';
    if (!$id)
    {
        $id = $this->Session->read('Questionnaire.id');        
    }
    if ($id) 
    {
        $this->data = $this->Questionnaire->read(null, $id);
        //echo "from ".$questionnaire['Questionnaire']['validFrom']." ".date("y.m.d");
        //echo " - to ".$questionnaire['Questionnaire']['validTo']." ".date("y.m.d");
        if ($this->data['Questionnaire']['isPublished'] != 1 
            //|| $this->data['Questionnaire']['validTo'] < date("y.m.d")
            //|| $this->data['Questionnaire']['validTo'] < date("y.m.d")
            )
        {
            $id = 0;
            $this->flash(__('Ungültiges Quiz. Weiter zum Archiv...', true), array('action'=>'archive'));
        }
    }
    else
    {
        $this->flash(__('Invalid Questionnaire', true), array('action'=>'intro'));
    }
    return $id;
}
function start($id = null) {
    $this->log("start");
    $id = $this->checkValidQuestionnaire($id);
    //$questionnaire = $this->Questionnaire->read(null, $id);
    $this->set('questionnaire', $this->data);
    // reset flow-controlling session vars
    $this->Session->write('Questionnaire',array('id' => $id));
    $this->Session->write('Questionnaire'.$id.'currQuestion', null);
    $this->Session->write('Questionnaire'.$id.'lastAnsweredQuestion', null);
    $this->Session->write('Questionnaire'.$id.'correctAnswersNum', null);
    $this->loadAdvertisement($id, 0);
    $this->Session->write('Questionnaire'.$id.'previewMode', $this->params['named']['preview_mode']);
    if (!$this->Session->read('Questionnaire'.$id.'previewMode'))
    {
        $questionnaire['Questionnaire']['participiantStartCount']++;
        $this->Questionnaire->save($questionnaire);
    }        
}
function loadAdvertisement($questionnaire_id, $question_id)
{
    //$questionnaire = array();
    $questionnaire = $this->Questionnaire->read(null, $questionnaire_id);
    //$question = array();
    $question = $this->Questionnaire->Question->read(null, $question_id);
    if (isset($question['Question']['advertisement_id']) && $question['Question']['advertisement_id'] > 0)
    {
        $this->set('advertisement', $this->Questionnaire->Question->Advertisement->read(null, $question['Question']['advertisement_id']));
    }
    else if (isset($questionnaire['Questionnaire']['advertisement_id']) && $questionnaire['Questionnaire']['advertisement_id'] > 0)
    {
        $this->set('advertisement', $this->Questionnaire->Question->Advertisement->read(null, $questionnaire['Questionnaire']['advertisement_id']));
    }
}
我真的不明白这个......它不认为它应该是这样的。任何帮助将不胜感激!:)
问候,斯图