我创建了一个具有以下依赖项的 ZF2 项目:
"php": ">=5.3.3",
"zendframework/zendframework": "2.*",
"zendframework/zend-developer-tools": "dev-master",
"doctrine/doctrine-orm-module": "dev-master",
"bjyoungblood/bjy-profiler": "dev-master"
我创建了一个用户实体和一个 RegisterUser 表单。在我的索引操作中,我将用户实体绑定到我的注册表单并将其传递给我的视图 - 如下所示:
public function indexAction() {
$entityManager = $this->getServiceLocator ()->get ( 'Doctrine\ORM\EntityManager' );
$form = new RegisterUserForm ( $this->serviceLocator );
$user = new User ();
$form->bind ( $user );
if ($this->getRequest()->isPost()) {
$form->setData ( $this->getRequest()->getPost () );
if ($form->isValid ()) {
$entityManager->persist($user);
$entityManager->flush();
}
}
return new ViewModel(array('form' => $form));
}
现在我想在同一个视图中添加另一个表单(登录)。我在找出最好的方法时遇到了一些麻烦。将多个表单绑定到同一个用户实体感觉很危险,而且我不确定如何在不同的操作中处理帖子。
这是我的表格:
class RegisterUserForm extends Form
{
public function __construct(ServiceManager $serviceManager)
{
parent::__construct('register-user-form');
$entityManager = $serviceManager->get('Doctrine\ORM\EntityManager');
$this->setHydrator(new DoctrineHydrator ($entityManager, 'Application\Entity\User'));
$userPostFieldset = new UserPostFieldset($serviceManager);
$userPostFieldset->setUseAsBaseFieldset(true);
$this->add($userPostFieldset);
}
}
以及对应的Fieldset:
class UserPostFieldset extends Fieldset implements InputFilterProviderInterface {
public function __construct(ServiceManager $serviceManager) {
parent::__construct ( 'user' );
$entityManager = $serviceManager->get ( 'Doctrine\ORM\EntityManager' );
$this->setHydrator ( new DoctrineHydrator ( $entityManager, 'Application\Entity\User' ) )->setObject ( new User () );
$this->add ( array (
'type' => 'Zend\Form\Element\Text',
'name' => 'firstName',
'options' => array (
'label' => 'First Name'
)
) );
$this->add ( array (
'type' => 'Zend\Form\Element\Email',
'name' => 'email',
'options' => array (
'label' => 'Email Address'
)
) );
$this->add ( array (
'type' => 'Zend\Form\Element\Email',
'name' => 'emailCheck',
'options' => array (
'label' => 'Re-Enter Email Address'
)
) );
$this->add ( array (
'name' => 'submit',
'attributes' => array (
'type' => 'submit',
'value' => 'Submit'
)
) );
}
public function getInputFilterSpecification() {
return array (
'email' => array (
'required' => true,
'filters' => array (
array (
'name' => 'StripTags'
),
array (
'name' => 'StringTrim'
)
),
'validators' => array (
array (
'name' => 'Identical',
'options' => array (
'token' => 'emailCheck',
'message' => 'Emails do not match'
)
)
)
)
);
}
}
任何见解将不胜感激。
问题:
1 - 将多个表单添加到处理同一实体的视图的最佳实践是什么?
2 - 如何分解我的索引操作,以便将多个表单传递到我的视图,然后将帖子映射到不同的操作以执行验证检查?
感谢:D