는 :젠드 프레임 워크 2 교리 2 - 여러 폼 같은보기 다음 종속성이 나는 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 양식을 만들었습니다. 내 index 액션에서 나는 내 등록 양식에 사용자의 법인을 구속 내보기에 전달 -과 같이 :
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);
}
}
그리고 해당 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
안녕하세요 샘, 저는 당신이 놀랐습니다! 나는 당신의 블로그에 많은 게시물을 읽었습니다. 제발 저를 참아주십시오 ... 저는 zf2를 처음 사용합니다. '내 로그인 양식'과 '내 등록 양식'작업은 어디에서 정의 할 수 있습니까? $ sl은 serviceLocator입니까? 솔루션은 멋지고 깨끗합니다. 사용자, 로그인 폼 및 등록 양식 용 vars를 만들었으므로 어떤 컨트롤러 액션에서라도 액세스 할 수 있습니다. 폼은 등록/로그인 액션 (새 뷰)에 제출됩니다. 유효성 검사가 실패하면 ViewModel을 만들고 setTemplate ('application/index/index.phtml')을 사용하여 인덱스 뷰를 다시 사용합니다. .zf2에 대한 당신의 큰 공헌에 감사드립니다. :) –
모듈이'getServiceConfig()'팩토리를위한 설정입니다. – Sam
팩토리를 살펴보고 곧 정리할 것입니다. . –