gpt4 book ai didi

php - Symfony 3 表单生成器 : block_name not working

转载 作者:行者123 更新时间:2023-12-05 07:43:11 24 4
gpt4 key购买 nike

symfony documentation ,据说我们可以重新定义 block_name 以获得更好的自定义,但它似乎不起作用。

这是我尝试过的:

声明集合时

$builder
->add('medias', CollectionType::class, array(
'entry_type' => MediaType::class,
'block_name' => 'media_proto'
));

在每个集合的字段上

//MediaType.php
$builder
->add('detail', TextType::class, array(
'translation_domain' => 'messages',
'label' => 'person.medias.detail',
'block_name' => 'media_proto'
))
->add('typeMedia', EntityType::class, array(
'class' => 'VSCrmBundle:TypeMedia',
'choice_translation_domain' => true,
'translation_domain' => 'messages',
'label' => 'person.medias.type',
'block_name' => 'media_proto'
))

集合里面的configureOptions

//MediaType.php
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'VS\CrmBundle\Entity\Media',
'block_name' => 'media_proto'
));
}

生成的html总是一样的

<input type="text" id="user_parent_person_medias_0_detail" name="user_parent[person][medias][0][detail]" required="required" class="" value="">

我的目的是使这些 block 名称统一,以便我可以全局自定义它们。

也许我误解了什么,因为所有 Symfony 的东西对我来说都是全新的。

谢谢

最佳答案

block_name 不是文本类型字段的继承选项的一部分。为了渲染它,你应该用

添加它
$builder
->add('detail', TextType::class, array(
'translation_domain' => 'messages',
'label' => 'person.medias.detail',
'attr'=>array('block_name' => 'media_proto')
))
->add('typeMedia', EntityType::class, array(
'class' => 'VSCrmBundle:TypeMedia',
'choice_translation_domain' => true,
'translation_domain' => 'messages',
'label' => 'person.medias.type',
'attr'=>array('block_name' => 'media_proto')
))

试试吧!

顺便说一句,您尝试使用链接到 symfony 文档的特定链接所做的事情需要 twig 模板的一部分并在 twig 文件中形成 _self 代码,以使其以这种方式工作。

已编辑

这似乎不再有效了。我记得这适用于 sf2。

你需要做的是识别你需要覆盖的字段,然后在twig中添加你需要覆盖的 block 。让我们想象一下您的字段是:选择和文本类型,并且取自 form_div_layout.html.twig:

{% form_theme name_of_your_form _self %}

{%- block form_widget_simple -%}
{%- set type = type|default('text') -%}
<input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %} block_name="media_proto"/> <!-- code you need -->
{%- endblock form_widget_simple -%}


{%- block choice_widget_collapsed -%}
{%- if required and placeholder is none and not placeholder_in_choices and not multiple and (attr.size is not defined or attr.size <= 1) -%}
{% set required = false %}
{%- endif -%}
<select {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %} block_name="media_proto">
{%- if placeholder is not none -%}
<option value=""{% if required and value is empty %} selected="selected"{% endif %}>{{ placeholder != '' ? (translation_domain is same as(false) ? placeholder : placeholder|trans({}, translation_domain)) }}</option>
{%- endif -%}
{%- if preferred_choices|length > 0 -%}
{% set options = preferred_choices %}
{{- block('choice_widget_options') -}}
{%- if choices|length > 0 and separator is not none -%}
<option disabled="disabled">{{ separator }}</option>
{%- endif -%}
{%- endif -%}
{%- set options = choices -%}
{{- block('choice_widget_options') -}}
</select>
{%- endblock choice_widget_collapsed -%}

我不知道这是否是最好的解决方案,但希望它能有所帮助!

关于php - Symfony 3 表单生成器 : block_name not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43910068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com