インターネットで見つけたすべてのリソースを読んで調べても、自分では理解できないので、これについては助けが必要です。
Imageエンティティがあります。3つのマップされたプロパティがあります。
- id
- 位置
- 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 %}
しかし、私はこの素晴らしいフレームワークが提供する優れたプラクティスを本当に使いたいと思っています。