前回の問題を解決して以来 (特に 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 ステートメントを使用します。助けてくれてありがとう