我在尝试自定义表单中特定字段的呈现时遇到困难。 它看起来像这样:
$builder->add('players', 'entity', array(
'class' => 'Acme\Bundle\Entity\Player',
'expanded' => true,
'multiple' => true,
'required' => false,
));
表单本身的呈现方式很简单:
{% block form_content %}
{% form_theme form 'AcmeBundle:Form:fields_child.html.twig' %}
{{ form_widget(form) }}
{% endblock %}
现在在fields_child.html.twig里面,我从另一个表单模板扩展,但没有什么特别之处。 我的HTML看起来像这样:
玩家: - [checkbox-input] 1
其中1等于数据库中唯一玩家的id。然而,不是渲染ID我试图在复选框后渲染他的图片和全名。 我已经尝试了多种形式主题的组合来覆盖它但每次都失败了。 有人可以发布树枝块来渲染我想要的东西吗?
由于
答案 0 :(得分:2)
您必须为其创建自定义表单字段类型以及自定义窗口小部件模板。
http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html
答案 1 :(得分:0)
我最近遇到了这个问题(情况有点不同。我需要将产品显示为带复选框的表格。),Form的子数据总是返回null值,这就是为什么我最终用这个(脏:))解决方案:
控制器操作:
...
$productRepository = $entityManager->getRepository('VendorMyBundle:Product');
$products = [];
$formChildren = $productListForm->createView()->children;
foreach ($formChildren['products'] as $formProduct) {
$formProductId = $formProduct->vars['value'];
$productEntity = $productRepository->find($formProductId);
$products[$formProductId] = $productEntity;
}
...
return $this->render('TEMPLATE', [
'productListForm' => $productListForm->createView(),
'products' => $products,
]);
模板:
...
{% for productForm in productListForm.products %}
{% set id = productForm.vars.value %}
<tr>
<td class="check">
{{ form_widget(productForm) }}
</td>
<td class="photo">
{% if products[id].getImages().isEmpty() == false %}
{% set productImage = products[id].getImages().first() %}
<img src="{{ productImage.getWebPath() | imagine_filter('st_product_cabinet_thumbnail') }}" />
{% else %}
<span class="no-image">No image</span>
{% endif %}
</td>
<td class="title">
<a href="{{ path('ROUT', {'productSlug':products[id].getSlug()}) }}" target="_blank">{{ products[id].getName() }}</a>
</td>
<td class="status">
{{ products[id].getStatusName(products[id].getStatus()) }}
</td>
<td class="price">
<ul>
{% for productPrice in products[id].getPrices() %}
<li>{{ productPrice.getValue() ~ ' ' ~ productPrice.getCurrencyCode() }}</li>
{% endfor %}
</ul>
</td>
</tr>
{% endfor %}
...