Intereting Posts
Facebook Notificationations PHP многомерный массив сообщения из формы Отправлять данные от контроллера, чтобы всплывать модально, используя bootstrap codeigniter «Доступ запрещен для пользователя» после перемещения базы данных MySQL на удаленный сервер Как преобразовать базу данных MySQL в SQLite в PHP? Как получить объект Builder из строк, связанных с точкой поворота – Laravel POSTing для https не всегда работает Получить URL-адрес категории в Magento при создании пользовательского меню Ошибка анализа XML-кода – дополнительный контент в конце документа php imagepng () генерирует черное изображение только на сервере Более элегантный способ разбора встроенных переменных в строках Преобразовать флажок в раскрывающийся список с помощью PHP Примечание. Попытка получить свойство ошибки, отличной от объекта Удаление записей, выбранных флажком Проверьте размеры изображения (высота и ширина) перед загрузкой изображения с помощью PHP

CakePHP: действие выполняется дважды, без уважительной причины

У меня странная проблема с моим пирогом (cake_1.2.0.7296-rc2). My start () – действие выполняется при определенных обстоятельствах дважды, хотя выполняется только один запрос.

Триггеры выглядят так: – загрузка объекта типа: $this->Questionnaire->read(null, $questionnaire_id); – доступ к данным $ this-data

Если я loadAvertisement() вызов loadAvertisement() из start()action, этого не произойдет. Если я loadAdvertisement(): два вызова внутри 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("ymd"); //echo " - to ".$questionnaire['Questionnaire']['validTo']." ".date("ymd"); if ($this->data['Questionnaire']['isPublished'] != 1 //|| $this->data['Questionnaire']['validTo'] < date("ymd") //|| $this->data['Questionnaire']['validTo'] < date("ymd") ) { $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'])); } } 

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

    С уважением, Стю

    Related of "CakePHP: действие выполняется дважды, без уважительной причины"

    Проверьте макет для несуществующих ссылок, например неверно настроенная ссылка на favicon.ico заставит действие контроллера запускаться во второй раз. Убедитесь, что favicon.ico указывает на webroot, а не на локальный каталог, иначе запросы будут генерироваться для /controller/action/favicon.ico, а не /favicon.ico, – и, таким образом, инициировать ваши действия.

    Это также может происходить с изображениями, таблицами стилей и javascript.

    Чтобы встретить проверку $ id, это int, затем проверьте, чтобы $ id существовал как первичный ключ в базе данных, прежде чем перейти к любой функции.

    Для меня это вопрос JS.

    Позаботьтесь о функции обертывания с помощью jQuery, чтобы повторно выполнить JS в завернутом контенте!

    Возможно, вам захочется попытаться выяснить, откуда это происходит, используя функцию debug_print_backtrace (). ( http://nl.php.net/manual/en/function.debug-print-backtrace.php

    Имела та же проблема, с определенным действием, случайным образом выполняющимся в 2-3 раза. Я обнаружил две причины:

    • Дополнения Firefox Yslow был настроен на автоматическую загрузку из своих настроек, заставляя страницы перезагружаться при использовании F5 (не при загрузке страницы из адресной строки браузера и нажатии Enter).

    • У меня было ошибочное объявление стиля CSS в параметрах $ html-> link (); в некоторых случаях это будет выглядеть как background-image: url ('') ;, что также вызвало повторный запуск. Установка стиля ссылки на фоновое изображение: нет; когда изображение не было доступно для меня.

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

    Удачи

    Йерун ден Хаан

    У меня была такая проблема, как на прошлой неделе.

    Две возможные причины

    • Неисправные маршруты (проверьте настройки маршрутов)
    • Неверный AppController. Я добавляю множество вещей в AppController, особенно до beforeFilter () и beforeRender (), поэтому вы можете также проверить их.

    Еще одна вещь: где вы устанавливаете Questioneer.id на своем сеансе? Возможно, это проблема?

    Да, это происходит, когда на веб-странице есть неработающая ссылка. Каждый браузер имеет дело с ним по-разному (Firefox называет его 2x). Я тестировал его, нет разницы в CakePHP v1.3 и v2.2.1. Чтобы узнать, кто является виновником, добавьте эту строку в код, а затем откройте второй сгенерированный файл в папке www :

     file_put_contents("log-" . date("Hms") . ".txt", $this->params['pass'] ); // CakePHP v1.3 file_put_contents("log-" . date("Hms") . ".txt", $this->request['pass'] ); //CakePHP v2.2.1 

    PS: Сначала я обвиняю JQuery за это. Но в конце было забыто изображение для загрузки AJAX в скрипте третьей части.

    У меня была такая же проблема в chrome, я отключил свой HTML Validator. Которая дважды загружала страницу

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

    то есть:
    http: // server / Анкеты / loadAvertisement -vs-
    HTTP: // сервер / опросники / loadavertisement

    При вызове конечной точки с надлежащим обходом метод выполнялся один раз – в том случае, когда нижняя обложка выполнялась дважды. Проблема возникала спорадически – происходит на одном контроллере, но не на другом (по существу, такая же логика, никаких дополнительных компонентов и т. Д.). Я не мог подтвердить, но считаю, что ошибка браузера – не сама CakePHP.

    Мое обходное решение заключалось в том, что каждая ссылка на конечную точку была надлежащей. Чтобы идти еще дальше, я добавил общие варианты case к конфигурации маршрута:

    приложение / Config / routes.php

     <?php // other routes.. $instructions = ['controller'=>'Questionnaires','action'=>'loadAvertisement']; Router::connect('/questionnaires/loadavertisement', $instructions); Router::connect('/QUESTIONNARIES/LOADADVERTISEMENT', $instructions); // ..etc 

    Если вы пропустите <something> , например View, Cake выведет недостающую <something> ошибку и попытается отобразить ее Error View . Поэтому AppController будет вызываться дважды. Если вы устраните недостающую проблему, AppController вызывается один раз.