2013-06-21 60 views
3

我試圖創建,HTML集合顏色輸入字段..這將使用JavaScriptZF2,Form集合在ZF2沒有創造正確輸入名字

動態添加

ColorFieldset代碼

namespace Dashboard\Form; 

use Zend\Form\Fieldset; 
use Zend\InputFilter\InputFilterProviderInterface; 

class ColorFieldset extends Fieldset implements InputFilterProviderInterface 
{ 
    public function __construct() 
    { 

     parent::__construct('color'); 

     $this->add(array(
      'name' => 'hash', 
      'options' => array(
       'label' => 'Color' 
      ), 
      'attributes' => array(
       'required' => 'required', 
       'class' => 'input-mini' 
      ) 
     )); 
    } 

    /** 
    * @return array 
    \*/ 
    public function getInputFilterSpecification() 
    { 
     return array(
      'hash' => array(
       'required' => true, 
      ) 
     ); 
    } 
} 

,並添加成形式

$this->add(array(
    'type' => 'Zend\Form\Element\Collection', 
    'name' => 'colors', 
    'options' => array(
     'count' => 2 , 
     'should_create_template' => true, 
     'allow_add' => true, 
     'target_element' => array(
      'type' => 'Dashboard\Form\ColorFieldset' 
     ) 
    ) 
)); 

在我看來,文件.. colors.phtml

<div id="colors_container" class=""> 
    <?php echo $this->formCollection($form->get('colors')); ?> 
</div> 

它打印輸出像

<div class="" id="colors_container"> 

    <label><span>Color</span><input type="text" value="" class="input-mini" required="required" name="hash"></label> 

    <label><span>Color</span><input type="text" value="" class="input-mini" required="required" name="hash"></label> 

    <span data-template='<label><span>Color</span><input name="hash" required="required" class="input-mini" type="text" value=""></label>'></span> 

</div> 

它應該像打印..這zf2 manual 2.0

<div class="" id="colors_container"> 

    <label><span>Color</span><input type="text" value="" class="input-mini" required="required" name="colors[0][hash]"></label> 

    <label><span>Color</span><input type="text" value="" class="input-mini" required="required" name="colors[1][hash]"></label> 

    <span data-template='<label><span>Color</span><input name="colors[__index__][hash]" required="required" class="input-mini" type="text" value=""></label>'></span> 

</div> 

解釋我預期的HTML輸入名稱colors[__index__][hash]。但它打印名稱爲<input type="text" value="" class="input-mini" required="required" name="hash">

在上面的案例中,我只會在文章$_POST['hash']中獲得一個顏色名稱。

爲什麼zf2不打印<input type="text" value="" class="input-mini" required="required" name="colors[0][hash]">?請諮詢我的代碼中有什麼問題。

+0

很好的問題...謝謝你 –

回答

10

呵呵終於找到了自己的答案。我必須致電

$form->prepare(); 

在呈現任何視圖之前。現在它可以工作

+0

謝謝你!你救了我的時間...我有確切的問題 –

+0

我找到你的答案之前花了這麼多時間在這個。希望我早點看過。謝謝! – MrNorm

+0

damm,爲此失去一天,然後找到答案。並由我先前提高。大聲笑 。 –

0

我可以確認。此代碼爲我工作:

// prepare form is needed to properly display Collection fields 
$form->prepare(); 

echo $this->form()->openTag($form); 

// echo other normal form fields 

echo $this->formCollection($form->get('colors')); 

echo $this->form()->closeTag();