ZF2 - 在许多选项卡中分隔一个表单

时间:2014-01-31 16:41:45

标签: php forms tabs zend-framework2 fieldset

我需要帮助.. 我有一个带有多个字段集的唯一表单,我需要在选项卡中单独显示一些字段集。

所以,我在视图中尝试过(形式是我整个形式的变量):

$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);

这些都不起作用..

我做得对吗?我怎么能这样做?

非常感谢。

1 个答案:

答案 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>