1

まず、私の下手な英語ですみません。

Zend フレームワーク 2 のデータベースからの値をドロップダウンに入力する方法についてよく読んだことがあります。非常に役立つ 2 つのリンクは次のとおりです。

  1. http://framework.zend.com/manual/2.2/en/modules/zend.form.collections.html
  2. http://zf2.readthedocs.org/en/release-2.1.4/modules/zend.form.advanced-use-of-forms.html

これは私がしたことです

  1. フォームを作成し、「categoryFieldset」タイプのフィールドを追加します

    class ProductForm extends Form { public function init() { // 渡された名前を無視したい parent::__construct('product'); $this->setName('製品'); $this->setAttribute('メソッド', 'ポスト'); $this->add(array( 'name' => 'id', 'type' => 'Hidden', )); $this->add(array( 'name' => 'name', 'type' => 'Text', 'options' => array( 'label' => 'Name', ), )); $this->add(array( 'name' => 'category', 'type' => 'CategoryFieldSet', )); $this-> add(array( 'name' => 'submit', 'type' => 'Submit', 'attributes' => array( 'value' => 'Add', 'id' => 'submitbutton', ), ) ); } }

  2. 選択フィールドを追加したフィールドセットから拡張する、categoryFieldset という名前のクラスを作成します。

    class CategoryFieldset extends Fieldset { function _ construct(CategoryTable $categoryTable) { 親:: _construct('category_fieldset');

        $this->setHydrator(new ClassMethodsHydrator(false))->setObject(new Category());
    
        $categorySelectOptionsArray = $categoryTable->populateSelectCategory();
        $this->add(array(
                'name' => 'categoryField',
                'type' => 'Select',
                'options' => array(
                        'label' => 'Category',
                        'value_options' => $categorySelectOptionsArray,
                ),
        ));
    }
    

    }

  3. モジュール ファイルにコードを追加します。

    public function getFormElementConfig() { return array( 'factories' => array( 'CategoryFieldSet' => function($sm) { $serviceLocator = $sm->getServiceLocator(); $categoryTable = $serviceLocator->get('Administrador\ Model\CategoryTable'); $fieldset = new CategoryFieldset($categoryTable); return $fieldset; }, ) ); }

  4. 私の見解は次のとおりです。

    $form = $this->form; $form->setAttribute('action', $this->url('product', array('action' => 'add'))); $form->prepare(); echo $this->form()->openTag($form); echo $this->formHidden($form->get('id')); echo $this->formRow($form->get('name')); エコー "
    "; $category_fieldset = $form->get('category'); echo $this->formRow($category_fieldset->get('categoryField')); エコー "
    "; echo $this->formSubmit($form->get('submit')); エコー "
    "; echo $this->form()->closeTag();

現在、すべて問題なく、select 要素はデータベースからの値を表示していますが、私の問題は、データをデータベースに追加しようとすると、カテゴリのドロップダウンであるフィールドが値ではなく「0」で保存されることです。カテゴリの ID 値。ビューが選択フィールドをレンダリングする方法に問題があると思います.HTMLコードを確認すると、選択フィールドの名前が「category [categoryField]」であり、「category」である必要があります。

これは HTML コードです。

<span>Category</span>
<select name="category[categoryField]">
<option value="1">Category 1</option>
<option value="2">Category 2</option>
<option value="3">Category 3</option>
<option value="4">Category 4</option>
<option value="5">Category 5</option>
</select>

$request->getPost() 配列を viw に出力したところ、次のように表示されました。

Zend\Stdlib\Parameters Object ( [storage:ArrayObject:private] => Array ( [id] => [name] => Product1 [category] => Array ( [categoryField] => 2 ) [submit] => Add ) )

フィールド名を「カテゴリ」のように表示したり、そのレコードをデータベースに保存できるようにするにはどうすればよいですか?

4

0 に答える 0