Я создал проект ZF2 со следующими зависимостями:Zend Framework 2 Doctrine 2 - Множественные формы же вид
"php": ">=5.3.3",
"zendframework/zendframework": "2.*",
"zendframework/zend-developer-tools": "dev-master",
"doctrine/doctrine-orm-module": "dev-master",
"bjyoungblood/bjy-profiler": "dev-master"
Я создал пользователь Entity и форму RegisterUser. В указательного действии Я связываю Entity пользователя в моей регистрационной форме и передать его на мой взгляд, - вот так:
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
Привет, Сэм, я был удивлен, что это были вы! Я прочитал много сообщений в вашем блоге. Пожалуйста, несите меня. Я новичок в zf2. Где бы я определил действия «my-login-form» и «my-register-form»? $ Sl - это serviceLocator? Решение выглядит красивым и чистым. Я закончил создание vars для пользователя, формы входа и формы регистра, чтобы я может получать доступ из любого действия контроллера. Формы представляют либо действия регистрации/входа в систему (новые виды), если проверка не выполняется. Я создаю ViewModel и использую setTemplate («application/index/index.phtml»), чтобы повторно использовать индексный вид. Спасибо за большой вклад в zf2 :) –
Редактировано, чтобы сделать его более прозрачным. Конфигурация для ваших модулей 'getServiceConfig()' фабрик – Sam
Я отредактирую вскоре после того, как я его очищу, взглянув на фабрики , –