收藏的Symfony表单自定义主题

问题描述 投票:0回答:1

我有一个 Symfony Form 集合,我正在尝试使用自定义主题自定义渲染的外观。

虽然

_basket_form_basket_items_widget
似乎不匹配。我已经使用
integer_widget

验证了主题正在运行

但是参考 Symfony 文档,上面的内容看起来应该有效?

我也试过:

_basket_form_basket_items_entry_widget
_basket_form_basket_items_qty_widget
_basket_form_basket_items_integer_widget
_basket_form_integer_widget

# src/templates/form/es_theme.html.twig

{# For view basket form #}
{% block _basket_form_basket_items_widget %}
    <div class="form-group row">
        <label for="{{ id }}" class="col-sm-1 col-form-label">{{ label }}</label>
        <div class="col-sm-11">
            <input type="number" name="{{ full_name }}" class="form-control" id="{{ id }}" min="{{ attr.min }}" value="{{ value }}">
        </div>
    </div>
{% endblock %}
// src/Form/BasketFormType.php

class BasketFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('basketItems', CollectionType::class, [
                'entry_type' => BasketItemQtyOnlyFormType::class,
                'allow_add' => false,
                'allow_delete' => false,
                'label' => null,
                'by_reference' => true,
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => Basket::class,
        ]);
    }
}
// src/Form/BasketItemQtyOnlyFormType.php

class BasketItemQtyOnlyFormType extends AbstractType
{
    public function __construct(private EntityManagerInterface $em)
    {
    }

    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('qty', IntegerType::class, [
                'label' => 'Quantity',
                'required' => true,
                'row_attr' => ['class' => 'margbott20'],
                'attr' => ['min' => 1],
                'empty_data' => 1,
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => BasketItem::class,
        ]);
    }
}
# src/templates/basket/index.html.twig

{% for basketFormItem in basketForm.basketItems %}
    {% set basketItem = basketFormItem.vars.value %}

    <div class="basketitem">
        <p class="orange-text">
            <b>
                <a href="{{ path('app_products_product', {'ref': basketItem.product.ref}) }}">{{ basketItem.product.displayName }}</a>
            </b>
        </p>
        <div class="itemline">
            <div class="col-sm-6 nopadding leftcolumn">
                <span class="helper"></span>
                <span>
                    <strong>Code</strong>&nbsp;&nbsp;{{ basketItem.product.ref|replace_keywords }}</span>
                <span class="floatright">
                    {{ form_widget(basketFormItem) }}
                    <a href="{{ path('app_basket_removebasketitem', {basketItem: basketItem.id}) }}" class="btn btn-danger">Remove</a>
                </span>
            </div>
            <div class="col-sm-6 nopadding rightcolumn">
                <span class="helper"></span>
                <span class="leftspan">
                    <strong>Unit price</strong>&nbsp;&nbsp;£{{ productService.getCalculatedUnitPrice(basketItem.product, basketItem.qty) }}</span>
                <span class="floatright">
                    <span class="centered">
                        <strong>Total</strong>&nbsp;&nbsp;£{{ basketService.getBasketItemTotal(basketItem)|round(2)|number_format(2)}}</span>
                </span>
            </div>
            <div class="clearboth"></div>
        </div>
    </div>
{% endfor %}
php twig symfony-forms symfony6
1个回答
0
投票

我设法解决了这个问题。

我在

var_dump($blockName)
(Symfony 6.2)中放了一个
vendor/symfony/twig-bridge/Form'TwigRendererEngine.php
,它显示了所有可能的块名称。

我要找的区块名称是

_basket_form_basketItems_entry_qty_widget

© www.soinside.com 2019 - 2024. All rights reserved.