2011-12-19 2 views
1

У меня есть действие контроллера следующимZend Framework DbTable вставки() вставка записи дважды

public function reportcommentAction() { 
    $comment_id = $this->getRequest()->comment_id; 

    $blockedCommentTable = new Application_Model_DbTable_BlockedComments(); 
    $blockedCommentTable->blockComment($comment_id, $this->user_id); 

} 

, который делает вызов к BlockComment() dbTable модель, которая выглядит как этот

class Application_Model_DbTable_BlockedComments extends Zend_Db_Table_Abstract { 

protected $_name = 'blocked_comments'; 

public function blockComment($comment_id, $blocked_by) { 

    if (!empty($comment_id) && !empty($blocked_by)) { 
     $data = array(
      'comment_id' => $comment_id, 
      'blocked_by' => $blocked_by 
     ); 

     $this->insert($data); 
     exit; 
    } 

} 

Для некоторых Причина, мне нужен этот выход; в конце. Без него я получаю 2 записи, а не только одну, как ожидалось.

У меня есть 3 поля в таблице заблокированных_композиций, то есть id, comment_id и заблокировано. С помощью инструкции exit я получаю запись со значениями 1, 21, 1, как и ожидалось. Без инструкции exit я получаю дополнительную запись со значениями 2, 0, 1 по какой-то причине.

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

+0

Должно быть достаточно простым, чтобы изучить, есть ли у вас что-то вроде xdebug. Вы уверены, что метод не вызывается дважды? – JohnP

+0

@JohnP Он уверен, что он называется дважды, но я не вижу, как это сделать. Я посмотрю, смогу ли я пройти через него с помощью xdebug. –

+0

Я запустил проект с отладчиком, и reportcommentAction вызывается дважды. В первый раз его правильно называют, а Request_Uri сообщает/us/account/report-comment/21 где 21 - параметр comment_id. Во второй раз в отчетах Request_Uri /us/account/report-comment/default.appcache?v=1 это ничего не значит для меня. –

ответ

2
The second time round the Request_Uri reports /us/account/report-comment/default.appcache?v=1 

Удалить атрибут manifest в основной HTML-тег (справа вверху), чтобы избавиться от второго вызова. Маршрутизация приложения Zend, похоже, срабатывает, а не служит для статического файла. Это может быть связано с тем, что файл не существует или может существовать по другому пути.

0

У меня была аналогичная проблема. Причина, почему ->insert был вызван дважды был из них:

public function saveAction() 
{ ... 
    $result = $this->_bookModel->saveBook($data); 
    if ($result) { 
     $this->view->form = $form->reset(); 
     $this->_helper->viewRenderer('index'); 
    } 

Я заменил

$this->_helper->viewRenderer('index'); 

с

return $this->_helper->redirector('index'); 

и она работала идеально.

Смежные вопросы