我需要帮助.. 我有一个带有多个字段集的唯一表单,我需要在选项卡中单独显示一些字段集。
所以,我在视图中尝试过(形式是我整个形式的变量):
$form = $this->form;
$customFieldset = $form->get('customFieldset');
$form->remove('customFieldset');
它有效,我的fieldset表单在$ customFieldset ..但是,我无法渲染这个! 试一试:
echo $this->form($customFieldset);
//OR
echo $this->formInput($customFieldset);
//OR
$this->formCollection($customFieldset);
这些都不起作用..
我做得对吗?我怎么能这样做?
非常感谢。
答案 0 :(得分:1)
要获得所需的结果(使用跨多个选项卡的表单,最好根据选项卡的编号以不同方式构造表单。例如,表单构造函数方法如下所示:
<?php
namespace Application\Form;
use Zend\Form\Form;
// A form model
class YourForm extends Form
{
// Constructor.
public function __construct($tabNum)
{
// Define form name
parent::__construct('contact-form');
// Set POST method for this form
$this->setAttribute('method', 'post');
// Create the form fields here ...
if($tabNum==1) {
// Add fields for the first tab
} else if($tabNum==2) {
// Add fields for the second tab
}
}
}
在上面的示例中,您将$tabNum
参数传递给表单模型的构造函数,构造函数方法根据其值创建一组不同的字段。
在控制器的操作中,您使用下面的表单模型:
<?php
namespace Application\Controller;
use Application\Form\ContactForm;
// ...
class IndexController extends AbstractActionController {
// This action displays the form
public function someAction() {
// Get tab number from POST
$tabNum = $this->params()->fromPost('tab_num', 1);
// Create the form
$form = new YourForm($tabNum);
// Check if user has submitted the form
if($this->getRequest()->isPost()) {
// Fill in the form with POST data
$data = $this->params()->fromPost();
$form->setData($data);
// Validate form
if($form->isValid()) {
// Get filtered and validated data
$data = $form->getData();
// ... Do something with the validated data ...
// If all tabs were shown, redirect the user to Thank You page
if($tabNum==2) {
// Redirect to "Thank You" page
return $this->redirect()->toRoute('application/default',
array('controller'=>'index', 'action'=>'thankYou'));
}
}
}
// Pass form variable to view
return new ViewModel(array(
'form' => $form,
'tabNum' => $tabNum
));
}
}
在视图模板中,使用以下代码:
<form action="">
<hidden name="tab_num" value="<?php echo $this->tabNum++; ?>" />
<!-- add other form fields here -->
</form>