Zend Framework DbTable insert () вставляет записи дважды - PullRequest
1 голос
/ 19 декабря 2011

У меня есть действие контроллера следующим образом

 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 и заблокировано. С оператором выхода я получаю запись со значениями 1, 21, 1, как и ожидалось. Без оператора выхода я получаю дополнительную запись со значениями 2, 0, 1 по некоторым причинам.

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

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011
The second time round the Request_Uri reports /us/account/report-comment/default.appcache?v=1 

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

0 голосов
/ 28 января 2012

У меня была похожая проблема. Причина, по которой ->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'); 

и он работал отлично.

...