0

前回の問題を解決して以来 (特に ChandlerTi に感謝します)、ZF2 と Doctrine を使用してデータベース レコードを編集し、安全に削除するために、コードを更新しようとしています。今、私は編集機能関連の問題に固執しています。編集ボタンをクリックすると、フォームが開き、レコードデータが正しく水和されます。それ以来、すべてが大丈夫です。しかし、保存ボタンでエラーが表示されます:

C:\Apache24\htdocs\Helpdesk\vendor\doctrine\dbal\lib\Doctrine\DBAL\DBALException.php:47

An exception occurred while executing 'INSERT INTO tbl_incidents (creation_timestamp, engineer, reporter, description, urgency_level_id, status_id) VALUES (?, ?, ?, ?, ?, ?)' with params [null, null, null, null, null, null]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'description' cannot be null

もちろん、それは正しいです。説明は null であってはなりません。でもそうじゃない!sript に送信された POST データをキャッチするためのトラップを作成しました。それらは正しいようです:

POST http://helpdesk.local/incident/add HTTP/1.1 Host: helpdesk.local User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: pl,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://helpdesk.local/incident/edit/7 Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 75 id=7&reporter=ttt&engineer=ttt&description=ttt&status=1&urgency=1&submit=Go 

すべての必須フィールドが入力されています。への説明。問題はどこだ?この POST データと add スクリプトによって生成された (正しく動作する) POST の唯一の違いは、add scipt が PHPSESSID 変数を使用することです。もう 1 つ: 私の編集コードは追加コードと同じです。

IncidentController.php

     public function editAction()
     {
            $incident = new Incident();
            if ($this->params('id') > 0) {
        $incident = $this->getEntityManager()->getRepository('Helpdesk\Entity\Incident')->find($this->params('id'));
    }

    $form = new IncidentForm($this->getEntityManager());
    $form->setHydrator(new DoctrineObject($this->getEntityManager(),'Helpdesk\Entity\Incident'));
    $form->bind($incident);

    $request = $this->getRequest();
    echo $request;
    if ($request->isPost()) {
        $form->setInputFilter($incident->getInputFilter());
        $form->setData($request->getPost());
        if ($form->isValid()) {
            $em = $this->getEntityManager();
            $em->persist($incident);
            $em->flush();

            $this->flashMessenger()->addSuccessMessage('Incident saved');

            // Redirect to list of incidents
            //return $this->redirect()->toRoute('incident');
        }
    }

    $viewModel = new ViewModel(array(
            'incident' => $incident,
            'form' => $form,
    ));
    $viewModel->setTemplate('helpdesk/incident/add.phtml');

    return $viewModel;
}


/**
 * Add action
 * 
 */
public function addAction()
{
    return $this->editAction();
}

ここでの追加と編集の違いは何なのか、私は完全に知りません。なぜ編集アクションは、UPDATE の代わりに SQL INSERT ステートメントを使用します。助けてくれてありがとう

4

1 に答える 1