gotoSimple (), кажется, перезагружается к текущему действию перед перенаправлением - PullRequest
0 голосов
/ 26 октября 2011

Почему-то кажется, что когда я использую gotoSimple в следующей настройке, мои данные будут сохранены дважды с помощью $object->save() в secondAction().

public function firstAction(){
    // get data

    // process postdata, if any

    if( $form->isValid( $postdata ) ) {
        $this->_helper->getHelper( 'Redirector' )->gotoSimple( 'second' );
    }

}

public function secondAction(){

    // get data

    // process postdata, if any

    if( $form->isValid( $postdata ) ) {
        if( $object->save( $postdata ) ) {
            // set flashmessage
            $this->_helper->getHelper( 'Redirector' )->gotoSimple( 'index' );
        }
    }

}

После нескольких часов отладки я пришел к выводу, что команда gotoSimple () в secondAction() вызывает secondAction(), прежде чем она перенаправляется на indexAction(). Я убедился, что indexAction() невозможно перенаправить обратно на secondAction().

Еще интереснее: это происходит только в IE7 и в IE8. Кто-нибудь может указать мне в любом возможном направлении, откуда может появиться это странное поведение и как я могу это решить?

UPDATE Используя следующие строки кода в secondAction() прямо перед командой gotoSimple(), я могу быть на 100% уверен в том, что каким-то образом secondAction() вызывается дважды, когда я нажимаю кнопку отправки:

if( isset( $_SESSION['xyz-zyx'] ) ) {
    $this->_helper->getHelper( 'flashMessenger' )->addMessage( 'I\'ve already been here!' );
    unset( $_SESSION['xyz-zyx'] );
}
$_SESSION['xyz-zyx'] = true;

Есть идеи?

Ответы [ 2 ]

1 голос
/ 27 октября 2011

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

Я видел много вариантов поведения в браузерах, когда они отправляли запрос дважды. Есть несколько причин, но также и дополнения, которые запускают второй запрос, связывающийся с вашим приложением. В одном случае это было что-то простое, например отсутствующий favicon.ico или неработающая ссылка на файл изображения. Это все нормально и не беспокоит вас, пока вы не начнете работать с состоянием сеанса или отправкой формы.

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

0 голосов
/ 28 марта 2012

Похоже, что проблема была вызвана использованием Zend_DataGrid (BvBGrid). Переписал все действие и исправил проблему:)

...