我有两种形式:
RegistrationForm
LoginForm
每个人都有自己的控制器:
RegistrationController
LoginController
我需要在一个视图中渲染
login_register.phtml
第一种表单的代码段:
<?php
$form = $this->form;
$form->setAttribute('action', $this->url('auth/default', array('controller' => 'index', 'action' => 'Login')));
$form->setAttribute('onsubmit', 'onSubmit()');
$form->prepare();
echo $this->form()->openTag($form);
?>
第二种形式的代码段:
<?php
$form = $this->form;
$form->setAttribute('action', $this->url('auth/default', array('controller' => 'registration', 'action' => 'index')));
$form->prepare();
echo $this->form()->openTag($form);
?>
我将它们放在一种形式中,但是由于没有发现第二种形式而给出错误。
的Zend \表格\异常\ InvalidElementException
中找不到[last_name]名称的元素
在表单
更新:
我只是声明了froms而我没有使用任何特殊代码来组合它们。 我需要帮助,因为我不知道怎么做?
答案 0 :(得分:1)
有两种方法可以实现您正在做的事情。
这个新的Controller及其相应的操作将侦听您指定的特定路径。然后它将实例化两个表单并将它们返回到它的视图:
public function combinedLoginRegisterAction()
{
return new ViewModel(array(
'loginForm' => $this->loginForm,
'registerForm' => $this->registerForm
));
}
显然你需要预先实例化表格
另一种方法是创建两个ViewHelper,除了渲染已经存在的Views之外什么都不做,即:
'view_helpers' => array(
'factories' => array(
'loginForm' => function($vhm) {
$form = new LoginForm();
$renderer = $vhm->getServiceLocator()->get('viewrenderer');
$viewModel = new ViewModel(array(
'form' => $form
));
$viewModel->setTemplate('your\normal\login\template');
return $renderer->render($viewModel);
}
)
)
然后,您就可以在任意视图中呈现您的表单,如下所示:
echo $this->loginForm();
显然,您只需要为registerform重复上述步骤。
重要强>
请注意,上面的viewhelper不是一个干净的版本(它可能是错误的:D)。创建时需要考虑几个方面。为了您自己的利益:我更喜欢第一个拥有专用控制器的解决方案,该控制器列出了这两个操作,然后让它的独立控制器处理工作流程。一旦用户提交任何一个表单,在下一个请求中只显示一个表单并不重要,因为这是他选择做的操作。
答案 1 :(得分:1)
当我想在一个视图中使用两个表单时,我所做的就是正确地重命名它们。例如, 在控制器中显示视图
$form = $this->getServiceLocator()->get('UserLoginForm');
$reform = $this->getServiceLocator()->get('UserRegisterForm');
$viewModel = new ViewModel(array(
'form' => $form,
'reform' => $reform,
));
return $viewModel;
在你的phtml文件中。
<?php
$reform = $this->reform;
$reform->prepare();
$reform->setAttribute('action', $this->url(NULL, array('controller'=>'Login', 'action' => 'register', 'name'=> 'form', 'class' => 'form')));
$reform->setAttribute('method', 'post');
echo $this->form()->openTag($reform);
?>
另一种形式。
<?php
$form = $this->form;
$form->prepare();
$form->setAttribute('action', $this->url(NULL, array('controller'=>'Login', 'action' => 'register', 'name'=> 'form', 'class' => 'form')));
$form->setAttribute('method', 'post');
echo $this->form()->openTag($form);
?>
这对我有用。所有在一个视图中