0

Zend Framework 2 を使用しており、依存ドロップダウンが必要です。ユーザーがカテゴリ (私の例では cat_id) を選択すると、システムはサブカテゴリ (sca_id) に正しい要素を入力します。

次のようなアプリケーションを作成することで、それを行うことができます。

私のフォームは次のようになります。

    $this->add(array(
        'name' => 'cat_id',
        'type' => 'Zend\Form\Element\Select',
        'options' => array(
            'label' => 'Categoria',
            'value_options' => array(
                '' => '',
            ),
        ),
    ));
    $this->add(array(
        'name' => 'sca_id',
        'type' => 'Zend\Form\Element\Select',
        'options' => array(
            'label' => 'Sub Categoria',
            'style' => 'display:none;', // Esse campo soh eh exibido qndo uma categoria for escolhida
            'value_options' => array(
                '' => '',
            ),
        ),
    ));

Service Manager が利用可能なコントローラーでそれを行うことを選択したため、そこには value_options を入力しないことに注意してください。

    $form = new ProdutoForm('frm');
    $form->setAttribute('action', $this->url()->fromRoute('catalogo-admin', array( ... )));
    // Alimenta as comboboxes...
    $form->get('cat_id')->setValueOptions($this->getCategoriaService()->listarCategoriasSelect());

cat_id の変更イベントで$.ajax、Action から要素を取得して sca_id を埋めます。

それはうまくいきます!

問題は私の検証にあります:

    $this->add(array(
        'name' => 'cat_id',
        'require' => true,
        'filters'  => array(
            array('name' => 'Int'),
        ),
    ));
    $this->add(array(
        'name' => 'sca_id',
        'require' => true,
        'filters'  => array(
            array('name' => 'Int'),
        ),
    ));

フォームを送信するとThe input was not found in the haystack、両方のドロップダウンについて...

私が間違っていることは何ですか?

追加の質問: ドロップダウンを埋めるためのより良い方法はありますか?

Ps .: この質問Disable notInArray Validator Zend Framework 2は私と似たようなことを尋ねていると思いますが、私の問題をもっと詳しく説明したかったのです。

4

1 に答える 1

1

さて、フォームを検証する前に select 要素を入力する必要があることに気付きました!

// SaveAction
$request = $this->getRequest();
if ($request->isPost())
{
    $form = new ProdutoForm();

    // Alimenta as comboboxes...
    $form->get('cat_id')->setValueOptions($this->getCategoriaService()->listarCategoriasSelect());
    $form->get('sca_id')->setValueOptions($this->getSubCategoriaService()->listarSubCategoriasSelect());

    // If the form doesn't define an input filter by default, inject one.
    $form->setInputFilter(new ProdutoFormFilter());

    // Get the data.
    $form->setData($request->getPost());

    // Validate the form
    if ($form->isValid())
    {
        // Valid!
    }else{
        // Invalid...
    }

そのコードはうまく機能します。私のフォームは完全に検証されるようになりました!

于 2012-11-06T10:41:01.130 に答える