0

私は現在zend-expressiveで作業していますが、今はzend-formを使用してフォームを生成したいと思います。すべてが適切にインストールされています。私は、次のスニペットを持っている私のテンプレートでzend-formコレクションで正しい名前が生成されない

<?php 

use Zend\Filter; 
use Zend\Form\Element; 
use Zend\Form\Form; 
use Zend\ServiceManager\Exception; 
use Zend\Validator; 

class CategoryForm extends Form 
{ 
    public function __construct($features = []) 
    { 
     parent::__construct('category'); 

     $this->add([ 
      'name' => 'id', 
      'type' => Element\Hidden::class, 
     ]); 

     $this->add([ 
      'name' => 'name', 
      'type' => Element\Text::class, 
      'options' => [ 
       'label' => 'Name', 
      ], 
     ]); 

     $this->add([ 
      'name' => 'features', 
      'type' => Element\Collection::class, 
      'options' => [ 
       'label' => 'Features', 
       'target_element' => new Element\Select('feature', $features), 
      ], 
     ]); 
    } 
} 

(小枝):

{{ form().openTag(form)|raw }} 

    {{ formElement(form.get('id')) }} 

    {% set element = form.get('name') %} 
    <div> 
     {{ formLabel(element) }} 
     <div> 
      {{ formElement(element) }} 
     </div> 
    </div> 

    {% set collection = form.get('features') %} 
    {{ formLabel(collection) }} 
    {% for element in collection %} 
     <div> 
      {{ formSelect(element) }} 
     </div> 
    {% endfor %} 

{{ form().closeTag(form)|raw }} 

これはうまくフォームが表示され、私は今、次のセットアップを持っています。今私の問題。私は、カテゴリを編集しようとすると、私はこのようなフォームを移入:

$formData = [ 
    'id' => $category->getId(), 
    'name' => $category->getName(), 
    'features' => [ 
     2, 
     3, 
    ], 
]; 

$this->categoryForm->setData($formData); 

しかし、今のフォームは、次のスニップ生成:あなたが見ることができるように、第2の選択要素が間違ってい

<form action="" method="POST" name="category"> 
    <input name="id" value="2" type="hidden"> 

    <div> 
     <label>Name</label> 
     <div> 
      <input name="name" value="Foo" type="text"> 
     </div> 
    </div> 

    <label>Features</label> 

    <div> 
     <select name="features[0]"> 
      <option value="1">A</option> 
      <option value="2" selected>B</option> 
      <option value="3">C</option> 
     </select> 
    </div> 

    <div> 
     <select name="1"> <!-- The name is wrong here --> 
      <option value="1">A</option> 
      <option value="2">B</option> 
      <option value="3" selected>C</option> 
     </select> 
    </div> 
</form> 

を名。他のすべてが素晴らしい作品ですが、名前の生成。私は何かが欠けているかどうかはわかりません。私は実際に他のウェブサイトでいくつかの助けを見つけることを試みたが、何も問題を解決しなかった。たぶんあなたは私の間違いを見て、私がこのフォームでやり遂げるのを助けることができます。

ありがとうございます。

答えて

1

デバッグの数時間後に、私はprepare()を早く使用したことがわかりました。今私はsetDataを使用した後、フォームを準備し、すべて正常に動作します。

関連する問題