15

名前と色を使ってアクティビティを追加する簡単なフォームを作成しようとしています。

だから私は色の配列でリストを作りたいと思っています、今のところそれは働いています私は色の名前を持っています。
selectタグに任意の属性を追加できます。

$form = $this->createFormBuilder($myclass)
->add('Colors','choice',array('label'=>'select some colors',
            'multiple'=>true,
            'choices'=>array(1=>'red', 2=>'blue', 3=>'green'),
            'attr'=>array('style'=>'width:300px', 'customattr'=>'customdata')
            ));

出力は次のようになります。

<select name="select" style="width: 300px;" multiple="multiple" customattr="customdata">
   <option value="1">red</option>
   <option value="2">blue</option>
   <option value="3">green</option>
</select> 

しかし、選択オプションに属性を追加するにはどうすればselected="selected"よいですか?このような:

<select name="select" style="width: 300px;" multiple="multiple" customattr="customdata">
   <option style="background-color: #F00;" value="1" selected="selected">red</option>
   <option style="background-color: #00F;" value="2" selected="selected">blue</option>
   <option style="background-color: #0F0;" value="3">green</option>
</select> 

私の質問は、symfony FormBuilderによってoption(タグではなく)タグにカスタム属性を追加するにはどうすればよいですか?注意: JavaScriptは使いたくありません。symfony2FormBuilderを使用して選択オプションをカスタマイズしたいと思います。select

4

6 に答える 6

10

通常、フィールドのデフォルトデータは、オブジェクトに格納されている値によって決定されます。たとえば、

class MyClass
{
    private $Colors = array(1, 2);
}

次に、エントリ「1」と「2」(ラベル「赤」と「緑」)がデフォルトで選択された状態で表示されます。フォームに渡す前に、この値をオブジェクトに保存することもできます。

$myObject->Colors = array(1, 2);

$form = $this->createFormBuilder($myObject)
    ...

最後の可能性は、「data」オプションを渡すことによって、オブジェクトに格納されているデフォルト値をオーバーライドすることです。

$builder->add('Colors', 'choice', array(
    'label' => 'select some colors',
    'multiple' => true,
    'choices' => array(1 => 'red', 2 => 'blue', 3 => 'green'),
    'attr' => array('style' => 'width:300px', 'customattr' => 'customdata'),
    'data' => array(1, 2),
));
于 2012-09-01T07:25:52.167 に答える
3

ここで説明されているデータオプションを使用しますfoselected= "selected": http ://symfony.com/doc/current/reference/forms/types/field.html

私たちの場合はこのようになる可能性があります

$form = $this->createFormBuilder($myclass)
->add('Colors','choice',array('label'=>'select some colors',
            'multiple'=>true,
            'choices'=>array(1=>'red', 2=>'blue', 3=>'green'),
            'attr'=>array('style'=>'width:300px', 'customattr'=>'customdata'),
            'data'=> 1
            ));

新しい要素は、選択された属性として選択配列の番号を設定するデータです

于 2012-09-02T06:15:19.500 に答える
1

Fieldsymfonyのすべては、デフォルトのオプションを渡すことができるオプションを持つ抽象フィールドタイプから継承します。data

ちなみに、styleものを渡さないでください、そしてカスタム属性のためdata-*に属性を使用してください。

于 2012-08-31T14:35:53.603 に答える
1

Symfony2.7はこれを簡単にするためのサポートを追加するようです:

https://github.com/symfony/symfony/pull/14050

于 2015-04-28T03:25:44.993 に答える
1

フォームクラスメソッドSymfony\Component \ Form \ AbstractType::finishViewを追加します

public function finishView(FormView $view, FormInterface $form, array $options)
{
    parent::finishView($view, $form, $options);

    $additionalAttributes = array();

    // myMethod - method $choice, returns a value that is to be substituted into the attribute
    foreach ($view->children['orders']->vars['choices'] as $id => $choice) {
        $additionalAttributes[$id] = array(
            'data-cost' => $this->propertyAccessor->getValue($choice->data, 'myMethod'),
            'disabled' => 'disabled',
        );
    }

    foreach ($view->children['orders']->children as $id => $child) {
        $child->vars['attr'] = array_replace(
            isset($child->vars['attr']) ? $child->vars['attr'] : array(),
            $additionalAttributes[$id]
        );
    }
}

Symfony2フォーム–選択したフィールドタイプに属性タグオプションを追加

于 2015-08-10T06:23:05.547 に答える
1

その選択肢の値に基づいて、選択肢にカスタム属性を追加するには、 ChoiceTypeフィールドchoice_attrのオプションの使用を検討してください。

たとえば、jsonでエンコードされたエンティティをオプションに渡す場合は、次のように使用できます。

'choice_attr' => function($val, $key) {
   return ['data-object' => json_encode($val)];
},
于 2016-09-08T07:09:50.463 に答える