2014-01-21 33 views
0

我想用ZF2創建一個非常複雜的表單,並且我找不到在輸入元素中實現基於數組的名稱的解決方案。如何使用數組名稱創建Zend表單中的元素

這是代碼從我的實際形式chunck:

<input type=text name=table[name] value="Table Name"> 
<input type=text name=table[title] value="Table Title"> 
<input type=text name=table[columns][names][] value="Column Name 1"> 
<input type=text name=table[columns][names][] value="Column Name 2"> 
<input type=text name=table[columns][names][] value="Column Name 3"> 
<input type=text name=table[columns][labels][] value="Column Label 1"> 
<input type=text name=table[columns][labels][] value="Column Label 2"> 
<input type=text name=table[columns][labels][] value="Column Label 3"> 

我知道如何與Zend /表格的工作,但是這是一種先進的usaged我不能老是高手。

回答

1

您的代碼看起來像呈現爲表格格式的動態表單。除了Zend Fieldsets外,還有一種可能性是使用OOP-Constructor動態生成基本的表單結構,就像@Sam所說的那樣。

在你的情況下,你應該有一個表單結構的概念。例如。你有一個來自數據庫的數據的陣列,它給你例如你的「列」的數量和名稱,以及如何構建動態表單的結構。

以下示例使用Zend Form構造函數生成動態表單。列數是動態的,並由給定數組指定$ tableColumns

<?php 

class DynamicForm extends Form { 

    /** 
    * This constructor builds a Zend Form dynamically 
    * 
    * @param array $tableColumns Dynamic data e.g. 'Column Name 1' 
    */ 
    public function __construct($tableColumns) { 

     // Add table name input 
     $this->add(array(
      'type' => 'text', 
      'name' => 'name' 
     )); 


     // Add table title input 
     $this->add(array(
      'type' => 'text', 
      'name' => 'title' 
     )); 


     // iterate each dynamic data 
     foreach($tableColumns as $column) { 

      $this->add(array(
       'type' => 'text', 
       'name' => $column['name'] 
      )); 
     } 
    } 
} 

這是您如何生成Zend表單結構。渲染的工作原理類似,但在您查看代碼。

<?php 

echo "<table>"; 
echo "<tr>"; 

echo "<td>". $this->formElement($form->get('name')) . "</td>"; 
echo "<td>". $this->formElement($form->get('title')) . "</td>"; 

foreach($tableColumns as $column) { 

    echo "<td>". $this->formElement($column) ."</td>"; 

} 

echo "</tr>"; 
echo "</table>"; 

?> 

在我看來,將表單動態轉換爲表格格式比將字段組合成表格要舒適得多。

但是儘管如此,Zend表單集合(例如Fieldsets)是一個不錯的選擇,如果您必須使用Javascript動態地添加或刪除表單元素並高度動態地處理表單數據。關於Zend公司從收集

更多信息在ZF2 Reference Manual

+0

其實描述,你正確地想通了。像魅力一樣工作。 –

1

您使用Zend\Form\Element\Fieldset這種情況。它有助於大量處理適當的OOP-表單構建。

相關問題