Symfony 表单生成器:如何 iterate/render 树枝中的动态文本字段数量? (Sylius - 额外的结帐步骤)
Symfony form builder: How to iterate/render dynamic amount of text fields in twig? (Sylius - exta checkout step)
我在 Sylius 结账程序中添加了一个额外的结账步骤,并且我正在尝试为每个订购商品实例添加 1 个文本字段。因此,将 3x itemA 和 1x itemB 放入购物车应该会生成 4 个文本字段。
到目前为止,我在表单生成器中有这段代码(基于此处的代码:https://sf.khepin.com/2011/08/basic-usage-of-the-symfony2-collectiontype-form-field/)
$builder->add('myCollection', CollectionType::class, $formOptions);
$totalCounter = 0;
/** @var OrderItem $item */
foreach($order->getItems() as $item) {
for($itemCounter = 0 ; $itemCounter < $item->getQuantity(); $itemCounter++ ) {
$totalCounter++;
$builder->get('myCollection')->add('item_' . $totalCounter, TextType::class, $formOptions);
}
}
第一个问题:对于我的特定场景,这是表单构建器的正确方法吗?第二:如果是,我如何在 twig 模板中读取它?
form.children.myCollection 确实存在但似乎不包含这些子项,因此我可以将它们与 form_row 函数一起使用。我所期望的是这样的:
{% set totalCounter = 0 %}
{% for item in order.items %}
{% for itemCounter in 1..item.quantity %}
{% set totalCounter = totalCounter + 1 %}
{{ form_row(form.children.myCollection['item_' ~ totalCounter ]) }}
{% endfor %}
{% endfor %}
知道怎么做吗?感谢您提前提示!
刚刚在 CollectionType 的文档开头看到了我的确切案例 https://symfony.com/doc/current/reference/forms/types/collection.html
表单生成器部分..
$builder->add('emails', CollectionType::class, [
// each entry in the array will be an "email" field
'entry_type' => EmailType::class,
// these options are passed to each "email" type
'entry_options' => [
'attr' => ['class' => 'email-box'],
],
]);
..和树枝部分:
{{ form_label(form.emails) }}
{{ form_errors(form.emails) }}
<ul>
{% for emailField in form.emails %}
<li>
{{ form_errors(emailField) }}
{{ form_widget(emailField) }}
</li>
{% endfor %}
我在 Sylius 结账程序中添加了一个额外的结账步骤,并且我正在尝试为每个订购商品实例添加 1 个文本字段。因此,将 3x itemA 和 1x itemB 放入购物车应该会生成 4 个文本字段。
到目前为止,我在表单生成器中有这段代码(基于此处的代码:https://sf.khepin.com/2011/08/basic-usage-of-the-symfony2-collectiontype-form-field/)
$builder->add('myCollection', CollectionType::class, $formOptions);
$totalCounter = 0;
/** @var OrderItem $item */
foreach($order->getItems() as $item) {
for($itemCounter = 0 ; $itemCounter < $item->getQuantity(); $itemCounter++ ) {
$totalCounter++;
$builder->get('myCollection')->add('item_' . $totalCounter, TextType::class, $formOptions);
}
}
第一个问题:对于我的特定场景,这是表单构建器的正确方法吗?第二:如果是,我如何在 twig 模板中读取它?
form.children.myCollection 确实存在但似乎不包含这些子项,因此我可以将它们与 form_row 函数一起使用。我所期望的是这样的:
{% set totalCounter = 0 %}
{% for item in order.items %}
{% for itemCounter in 1..item.quantity %}
{% set totalCounter = totalCounter + 1 %}
{{ form_row(form.children.myCollection['item_' ~ totalCounter ]) }}
{% endfor %}
{% endfor %}
知道怎么做吗?感谢您提前提示!
刚刚在 CollectionType 的文档开头看到了我的确切案例 https://symfony.com/doc/current/reference/forms/types/collection.html
表单生成器部分..
$builder->add('emails', CollectionType::class, [
// each entry in the array will be an "email" field
'entry_type' => EmailType::class,
// these options are passed to each "email" type
'entry_options' => [
'attr' => ['class' => 'email-box'],
],
]);
..和树枝部分:
{{ form_label(form.emails) }}
{{ form_errors(form.emails) }}
<ul>
{% for emailField in form.emails %}
<li>
{{ form_errors(emailField) }}
{{ form_widget(emailField) }}
</li>
{% endfor %}