2013-04-04 14 views
5

Tôi có hình thức với fieldsets:ZF2 làm thế nào để bọc nội dung trong fieldset mẫu?

$formConfig = array(
    'fieldsets' => array(
     ... 
    ); 
); 

$factory = new Zend\Form\Factory(); 
$form = $factory->createForm($formConfig); 
echo $this->form($form); 

Nó làm cho một cái gì đó như thế này:

<form> 
    <fieldset> 
     <legend>Fieldset label</legend> 
     <label><span>Elem 1</span><input type="text" name="f1[el1]" /></label> 
     <label><span>Elem 2</span><input type="text" name="f1[el2]" /></label> 
     <label><span>Elem 3</span><input type="text" name="f1[el3]" /></label> 
    </fielset> 
</form> 

Vấn đề là tôi cần phải quấn nội dung sau khi huyền thoại:

<form> 
    <fieldset> 
     <legend>Fieldset label</legend> 
     <div class="wrapper"> 
      <label><span>Elem 1</span><input type="text" name="f1[el1]" /></label> 
      <label><span>Elem 2</span><input type="text" name="f1[el2]" /></label> 
      <label><span>Elem 3</span><input type="text" name="f1[el3]" /></label> 
     <div> 
    </fielset> 
</form> 

Làm thế nào tôi có thể làm việc đó đi?

Trả lời

14

Một lần nữa, bạn cần hiểu rằng Zend\Form\Fieldset không bằng HTML <fieldset>! Một Zend\Form\Fieldset chỉ đơn thuần là một bộ sưu tập của Zend\Form\Element thường đại diện cho một thực thể và bạn có thể cung cấp một số thực thể với dữ liệu từ một Biểu mẫu.

Bây giờ khi nói đến kết xuất biểu mẫu, điều đầu tiên bạn nên tìm hiểu là một số Zend\Form\View\Helper -Classes. Bạn đang sử dụng trình trợ giúp xem form(), giúp tự động dịch tất cả Zend\Form\Element bằng cách sử dụng formRow() và tất cả Zend\Form\Fieldset sử dụng formCollection(). Nhưng bạn không muốn làm điều đó!

Khi muốn sản lượng ưa thích của mình, bạn sẽ cần tự mình hoàn thành biểu mẫu. Một cái gì đó như thế này có thể là dạng xem của bạn:

<?=$this->form()->openTag($form);?> 
    <fieldset> 
     <div class="wrapper"> 
      <?=$this->formRow($form->get('f1')->get('el1'));?> 
      <?=$this->formRow($form->get('f1')->get('el2'));?> 
      <?=$this->formRow($form->get('f1')->get('el3'));?> 
     </div> 
    </fieldset> 
<?=$this->form()->closeTag();?> 

Bây giờ, điều này đã có một chút thoải mái trong đó, như bạn đang sử dụng formRow(). Bạn cũng có thể chia ra từng loại hình hàng và đi theo con đường rất detailled như:

<label> 
    <span><?=$this->formLabel($form->get('f1')->get('el1'));?></span> 
    <?=$this->formInput($form->get('f1')->get('el1'));=> 
    <?=$this->formElementErrors($form->get('f1')->get('el1'));?> 
</label> 

Ngay cả ở đó, formInput() vẫn là một kỳ diệu mà xuất phát vào những thứ như formText(), formSelect(), formTextarea(), vv .., vv .. .

+2

+1 để làm rõ Fieldset. Thật là một lựa chọn đặt tên đáng kinh ngạc trên một phần của cộng đồng ZF2. Tại sao không đi với FieldCollection hoặc một cái gì đó ít mơ hồ và khó hiểu? – Xunnamius

Các vấn đề liên quan