0

zf2 で作成されたプロジェクトにドロップダウンを配置したい...一日中無駄にしましたが、動的ではなく静的なドロップダウンしか取得しませんでした。誰でもこの問題で私を助けることができますか??

ユーザーフォーム.php

$this->add(array(
            'name' => 'group_name',
            'type' => 'select',  
            'attributes' => array(
                'id'=>'group_name',
                'class'=>'large',
                'options' => array('1=>php','2'=>'java'),
            ),
            'options' => array(
                'label' => '',
            ),
        ));

貴重なご回答ありがとうございます。

4

5 に答える 5

0

これは私がしたことです:

フォームのコンストラクターで

    $this->add(array(
        'type' => 'Zend\Form\Element\Select',
        'name' => 'color',
        'options' => array(
            'empty_option' => 'Select a Color',
            'value_options' => self::getColors(),
            'label' => 'Color',
        ),
    ));

まだフォームクラスで、私はこのメソッドを作成しました:

public static function getColors() {
    // access database here
    //example return
    return array(
        'blue' => 'Blue',
        'red'  => 'Red',
    );
}

私のビュースクリプトでは:

    <div class="form_element">
        <?php $element = $form->get('color'); ?>
        <label>
            <?php echo $element->getOption('label'); ?>
        </label>
        <?php echo $this->formSelect($element); ?>
    </div>
于 2013-03-14T03:26:48.057 に答える
0

これを試して:

$this->add(array(
    'name' => 'group_name',
    'type' => 'select',  
    'attributes' => array(
        'id'=>'group_name',
        'class'=>'large',
    ),
    'options' => array(
        'label' => '',
        'value_options' => array(
            '1' => 'php', 
            '2' => 'java'
        ),
    ),
));
于 2013-03-13T11:37:39.073 に答える
0

抽象的なレベルから考えてみてください。

  • 1 つのフォームがあります
  • フォームには外部からのデータが必要です

したがって、最終的にフォームにはDependency. 公式ドキュメントから学んだので、Dependency-Injection別名には2つのタイプがありDIます。セッター注入とコンストラクター注入。個人的に(!)私はこれらの場合にどちらかを使用します:

機能が機能するために依存関係が絶対的な要件である場合のコンストラクター注入

依存関係が多かれ少なかれオプションであり、すでに機能しているものを拡張する場合のセッターインジェクション

あなたのフォームの場合、それは必須の依存関係です(それがないと、Select-Element が入力されないため)、Constructor-Injection の例を示します。

コントローラーのいくつかのアクション:

$sl   = $this->getServiceLocator();
$dbA  = $sl->get('Zend\Db\Adapter\Adapter');
$form = new SomeForm($dbA);

フォームは以上です。人口はフォーム内で発生します。これは単なる例であり、微調整が必​​要になる場合がありますが、アイデアは次のとおりです。

class SomeForm extends \Zend\Form
{
    public function __construct(\Zend\Db\Adapter\Adapter $dbA)
    {
        parent::__construct('my-form-name');

        // Create all the form elements and stuff

        // Get Population data
        $popData = array();
        $result = $dbA->query('SELECT id, title FROM Categories', $dbA::QUERY_MODE_EXECUTE)->toArray();
        foreach ($result as $cat) {
            $popData[$cat['id'] = $cat['title'];
        }

        $selectElement = $this->getElement('select-element-name');
        $selectElement->setValueOptions($popData);
    }   
}

重要: 上記のコードについての手がかりはありません。これは、ドキュメントに従ってZend\Db動作すると思われる方法についてのみです。これは、おそらく最適化が必要な部分です。しかし、全体として、それがどのように行われるかについてのアイデアが得られます。

于 2013-03-14T10:55:01.393 に答える
0

同じ問題に遭遇し、zf2 ソースを調べる必要がありました。これはよりOOPソリューションです:

フォーム コンストラクター内:

        $this->add(array(
        'name' => 'customer',
        'type' => 'Zend\Form\Element\Select',
        'attributes' => array(
            'options' => array(
                0 => 'Kunde',
            )
        ),
        'options' => array(
                'label' => 'Kunde'
    )));

コントローラー内:

    $view->form = new SearchForm();
    $customers = $view->form->get('customer')->getValueOptions();
    $customers[] = 'Kunde1';
    $customers[] = 'Kunde2';
    $customers[] = 'Kunde3';
    $customers[] = 'Kunde4';
    $view->form->get('customer')->setValueOptions($customers);
于 2014-08-06T13:03:30.953 に答える