私のZendアプリケーションでは、テーブルごとに個別のモデルがあり、データは次を使用して取得されますTableGateway
ここで、編集ページを作成するフォームを実装する必要があります。http://framework.zend.com/manual/2.2/en/user-guide/forms-and-actions.htmlに記載されているように、1つのテーブル/モデルのフォームを作成できました
これが私の編集アクションです-
public function editAction()
{
$id = (int) $this->params()->fromRoute('id', 0);
if (!$id) {
return $this->redirect()->toRoute('candidate', array(
'action' => 'index'
));
}
try {
$candidate = $this->getCandidateTable()->getCandidate($id);
}
catch (\Exception $ex) {
return $this->redirect()->toRoute('candidate', array(
'action' => 'index'
));
}
$form = new CandidateForm();
$form->bind($candidate);
$form->get('submit')->setAttribute('value', 'Edit');
$request = $this->getRequest();
if ($request->isPost()) {
$form->setInputFilter($candidate->getInputFilter());
$form->setData($request->getPost());
if ($form->isValid()) {
$this->getCandidateTable()->saveCandidate($candidate);
return $this->redirect()->toRoute('candidate');
}
}
return array(
'id' => $id,
'form' => $form,
);
}
ビューの編集 -
<?php
$title = 'Edit Candidate';
$this->headTitle($title);
?>
<h1><?php echo $this->escapeHtml($title); ?></h1>
<?php
$form = $this->form;
$form->setAttribute('action', $this->url(
'candidate',
array(
'action' => 'edit',
'id' => $this->id,
)
));
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formHidden($form->get('id'));
echo $this->formRow($form->get('title'));
echo $this->formSubmit($form->get('submit'));
echo $this->form()->closeTag();
この編集アクションは、フォームを 1 つのテーブル (CandidateTable) にバインドします。しかし、私のアプリケーションでは、そのページには複数のテーブル (CandidateSkills、CandidateQualifications など) からのデータがあります。送信をクリックすると、データが別のテーブルに保存されます。