尝试这样的事情;
控制器动作:
public function editAction()
{
$film = new Film;
if ($this->params('id') > 0) {
$film = $this->getEntityManager()->getRepository('Cine\Entity\Film')->find($this->params('id'));
}
$form = new FilmForm($this->getEntityManager());
$form->setHydrator(new DoctrineEntity($this->getEntityManager(),'Cine\Entity\Film'));
$form->bind($film);
$request = $this->getRequest();
if ($request->isPost()) {
$form->setInputFilter($film->getInputFilter());
$form->setData($request->getPost());
if ($form->isValid()) {
$em = $this->getEntityManager();
$em->persist($film);
$em->flush();
$this->flashMessenger()->addSuccessMessage('Film Saved');
return $this->redirect()->toRoute('cine/default', array('controller' => 'film','action' => 'index'));
}
}
return new ViewModel(array(
'film' => $film,
'form' => $form
));
}
形式:
<?php
namespace Cine\Form;
use Doctrine\ORM\EntityManager;
use Zend\Form\Form;
use Zend\Form\Element;
class FilmForm extends Form
{
public function __construct(EntityManager $em)
{
parent::__construct('film');
$this->setAttribute('method', 'post');
$this->add(array(
'name' => 'id',
'attributes' => array(
'type' => 'hidden',
),
));
$this->add(array(
'name' => 'title',
'type' => 'text',
'options' => array('label' => 'Film Title'),
'attributes' => array(
'class' => 'input-xxlarge'
)
));
$this->add(array(
'name' => 'actors',
'type' => 'DoctrineModule\Form\Element\ObjectSelect',
'options' => array(
'label' => 'Actors',
'empty_option' => 'Select Actors',
'object_manager' => $em,
'target_class' => 'Cine\Entity\Actor',
'property' => 'name'
),
'attributes' => array(
'multiple' => 'multiple',
'required' => false,
'class' => 'chosen'
)
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Save',
'id' => 'submitbutton',
),
));
}
}
看法:
<?php
$title = 'Edit Film';
$this->headTitle($title);
?>
<h1><?php echo $this->escapeHtml($title); ?></h1>
<?php $form->setAttribute('action', $this->url('cine/default', array('controller' => 'film', 'action' => 'edit', 'id' => $film->getId())));
$form->setAttribute('class', 'form-horizontal');
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formHidden($form->get('id'));
//Film Title
echo $this->formRow($form->get('title'));
echo $this->formRow($form->get('actors'));
echo $this->formSubmit($form->get('submit'));
echo $this->form()->closeTag();
?>