3

Zend Form にコレクション要素を含める方法の簡単な実例が必要です。Zend Framework 2サイトと StackOverflow の以前の投稿からいくつかの例を見てきました。それらのほとんどはこのリンクを指していました。しかし、現在、私は Fieldsets を使用しておらず、Forms にとどまっているため、誰かが正しい方法で私に指示できる場合、ユーザーが表示されたものから複数の選択肢を選択できるページをユーザーが取得したときに、単純なコレクション要素を含める方法を教えてください。コレクションフォーム。データベースからコレクションフォームにデータを入力する方がはるかに優れています。

私はインターネットでかなり長い間検索してきましたが、Zend の専門家が提案できるように、ここに投稿しようと思いました。

参考までに: 通常、この方法で Zend Form に静的なドロップダウン ボックスを含めることができます。

$this->add(
    array(
        'name'       => "countr",
        'type'       => 'Zend\Form\Element\Select',
        'options'    => array(
            'label' => "Countries",
            'options' => array(
                'country1' => 'Brazil',
                'country2' => 'USA',
                'country3' => 'Mexico',
                'country4' => 'France',
            )
        )
    )
);

したがって、これを行う方法の基本的なアイデアを得ることができる簡単な例を期待しています。

4

2 に答える 2

1

正直なところ、ここであなたの問題はわかりません。フォーム コレクションは extends Fieldsetwhich extendsElementであるため、通常の要素としてフォームに追加するだけです。ビュー ヘルパーは、レンダリングを再帰的に処理します。

ステップ 1:フォーム コレクションを作成します (のインスタンスを作成しますZend\Form\Element\Collection)。何らかの方法で要素を動的に追加する必要がある場合は、この目的のためにファクトリ クラスを作成します。

ステップ 2:フォームに追加します。(たとえば、 を使用し$form->add($myCollectionInstance)ます。)

ステップ 3:レンダリングします。Zend\Form\View\Helper\Collectionフォーム全体を苦労せずにレンダリングするための非常に優れたビュー ヘルパーです。

拡張する新しいクラスを作成しZend\Form\Element\Collection、コンストラクターを使用して必要なフィールドを追加することもできます。したがって、質問に貼り付けた配列を使用してフォームに追加できます。また、注釈で直接使用することもできます。

お役に立てれば。

于 2012-09-27T14:47:38.413 に答える
0

選択リストにオプション値を入力したいだけの場合は、コントローラーの選択リストに配列を追加できます。

$form = new MyForm();
$form->get('countr')->setOptions(array('value_options'=>array(
                    'country1' => 'Brazil',
                    'country2' => 'USA',
                    'country3' => 'Mexico',
                    'country4' => 'France',
                ));

配列は db から取得できます。

これは、フォーム コレクションを最も単純な方法で使用する別の例です。この例では、入力テキスト要素をコレクションに作成し、それらに入力します。要素の数は、配列によって異なります。

class MyForm extends \Zend\Form\Form
{
    $this->add(array(
        'type' => '\Zend\Form\Element\Collection',
        'name' => 'myCollection',
        'options' => array(
            'label' => 'My collection',
            'allow_add' => true,
    )
    ));
}

    class IndexController extends AbstractActionController
    {

    public function indexAction
    {
        $form = new MyForm();

        $this->addElementsFromArray($form, array(

                'country1' => 'Brazil',
                'country2' => 'USA',
                'country3' => 'Mexico',
                'country4' => 'France',
            ));

    //the above line can be replaced if fetching the array from a db table:
    //$arrayFromDb = getArrayFromDb(); 
    //$this->addElementsFromArray($form, $arrayFromDb);

    return array(
        'form' => $form
    );
    }

    private function addElementsFromArray($form, $array)
    {
        foreach ($array as $key=>$value)
        {
        $form->get('myCollection')->add(array(
                //'type' => '\Zend\Form\Element\SomeElement',
                'name' => $key,
                'options' => array(
                        'label' => $key,
                ),
                'attributes' => array(
                        'value' => $value,
                )
        ));
        }
    }
}

index.phtml:

$form->setAttribute('action', $this->url('home'))
     ->prepare();
echo $this->form()->openTag($form);
echo $this->formCollection($form->get('myCollection'));
echo $this->form()->closeTag();
于 2013-08-22T18:16:56.057 に答える