1

インターネットで見つけたすべてのリソースを読んで調べても、自分では理解できないので、これについては助けが必要です。

Imageエンティティがあります。3つのマップされたプロパティがあります。

  1. id
  2. 位置
  3. thumb_location

そして、AbstractTypeを拡張するカスタムImageSelectTypeフォームタイプがあります。

buildForm関数は次のようになります。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $em = $options['em'];

    $qb = $em->createQueryBuilder();
    $result = $qb->select('i')
            ->from('BloggerBlogBundle:Image', 'i')
            ->leftJoin('i.articles', 'a')
            ->where('a is NULL')
            ;

    $builder
        ->add('images', 'entity', array(
                'class' => 'BloggerBlogBundle:Image',
                'query_builder' => $result,
                                    'required' => true,
                                    'multiple' => false,
                                    'expanded' => true,
            )
        )
                        ->setAttribute('widget', 'imageSelect')
        ;
}

そのため、どの記事でも使用されていないすべての画像を取得し、フォームにそれらを入力します。これらのオプションを使用すると、次のようなラジオボタンが表示されます。

<div id="image_images">
    <input type="radio" id="image_images_67" name="image[images]" required="required" value="67"><label for="image_images_67" class="required">c5252b4ffc9c50540218e25be1353b33aaa4ee05.png</label>
    <input type="radio" id="image_images_68" name="image[images]" required="required" value="68"><label for="image_images_68" class="required">fcfc7d7d05d63b1f55dff8cbff0bedeb3c917dfc.jpeg</label>
</div>

私が今欲しいのは、すべてのラジオボタンにカスタムhtml5データ属性data-thumb="thumbnail/location.png"を持たせることです。これはthumb_location、そのラジオボタンによって表される画像オブジェクトのプロパティ値になります。

私は十分に明確だったと思います。さらに情報が必要な場合は、提供します。私はこれについてたくさん読んだことがありますが、実際よりももっと複雑なことを想像していると思います。ある時点で、「ああ、忘れて、これを手動でレンダリングする」と言いたかったのですが、次のように使用します。

{% for choice in form.vars.choices %}
    <input type="radio" data-thumb="{{choice.thumb_location}}" />
{% endfor %}

しかし、私はこの素晴らしいフレームワークが提供する優れたプラクティスを本当に使いたいと思っています。

4

2 に答える 2

0

質問を理解できるかどうかわかりませんがdata-thumb、フォームビルダー内で直接設定しますか?

そのため、フォームビルダーにはメソッドを含むメイン機能(http://api.symfony.com/2.0/Symfony/Component/Form/FormBuilder.html)が含まれていますsetAttribute(string $name, string $value)

あなたは次のようなことをすることができます:

setAttribute('data-thumb', $yourvalue);

これらの属性を入力フィールドに適用するには、Twigテンプレートに属性を設定する必要があります。

 <input type="radio" {{ block('widget_attributes') }} />
于 2012-12-23T00:00:33.920 に答える
0

ああ、これはFormTypeと同じように、このオブジェクトに関連していると思いました。したがって、この場合、buildViewメソッドを使用して変数を設定する可能性があります。

 /**
 * {@inheritdoc}
 */
public function buildView(FormView $view, FormInterface $form, array $options)
{
     $view->vars['thumb'] = $options['thumb'];
}

このオプションは、-> add(x、x、array('thumb_location' =>'location'))(またはsetDefaultOptionsメソッド)のどちらでも設定できます。

しかし今、私は正直であるかどうかわかりません。次のようなビューで設定する必要があるため:

<input data-thumb="{{ thumb }}" type="radio" id="blog_article_image_17" name="blog_article[image]" required="required" value="17">

そして、これはあなたが<input data...再び手で作ることを意味します。

あなたのケースでこれが可能かどうかはわかりませんが、ラジオ入力フィールドに2番目のFormTypeを定義するとよいと思います。

public function buildForm(FormBuilderInterface $builder, array $options)
{
   ...this is your current form builder....

   ->add('radio', MyRadioType());
}
于 2012-12-25T17:14:43.050 に答える