簡體   English   中英

以表單(Symfony)呈現自定義實體類型字段

[英]Render custom entity type field in form (Symfony)

我在嘗試自定義表單中特定字段的呈現時陷入困境。 看起來像這樣:

$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看起來像這樣:

玩家:-[復選框輸入] 1

其中1等於數據庫中唯一玩家的ID。 但是,不是渲染ID,而是嘗試在復選框后渲染其圖片和全名。 我嘗試過多種形式化主題的組合來覆蓋它,但每次都失敗。 有人可以在樹枝上貼上我想要的東西嗎?

謝謝

您必須為其創建自定義表單字段類型以及自定義窗口小部件模板。

http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html

最近,我遇到了這個問題(情況略有不同。我需要將產品顯示為帶有復選框的表。),Form的子數據始終返回空值,這就是我最終使用此(dirty :)的解決方案的原因:

控制器動作:

...
$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 %}
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM