次の依存関係を持つ 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"
User Entity と RegisterUser Form を作成しました。インデックス アクションでは、ユーザー エンティティをレジスタ フォームにバインドし、それをビューに渡します。
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));
}
ここで、同じビューに別のフォーム (ログイン) を追加したいと思います。そのための最善の方法を見つけるのに苦労しています。複数のフォームを同じ User エンティティにバインドするのは危険であり、別のアクションで投稿を処理する方法がわかりません。
ここに私のフォームを見てください:
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);
}
}
対応するフィールドセット:
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 - 複数のフォームをビューに渡し、投稿をさまざまなアクションにマップして検証チェックを実行できるように、インデックス アクションを分割するにはどうすればよいですか?
ありがとう