删除百分比字段类型上的百分比符号


Remove percent sign on a percent field type

我一直在谷歌上搜索,但我找不到删除表单组件(Symfony)在渲染表单时添加到百分比字段类型中的百分号的方法。我发现了与重新定义百分比小部件有关的东西,但我无法了解它是如何工作的,也无法在哪里更改它。

这是我发现的:

您可以将默认布局中的percent_widget块覆盖到 像这样:

{% block percent_widget %}
    {% spaceless %}
        {% set type = type|default('text') %}
        {{ block('form_widget_simple') }}
    {% endspaceless %}
{% endblock percent_widget %}

我目前在模板中的渲染代码是:

<div class="form-group">
    {{ form_label(edit_form.discountRate, 'Discount', {'label_attr':{'class':'col-sm-2 control-label'}}) }}
    <div class="col-sm-10">
        <div class="input-group">
            {{ form_widget(edit_form.discountRate, {'attr': {'class':'form-control'}}) }}
            <div class="input-group-addon">%</div>
        </div>                  
    </div>         
</div>

PD:使用boootstrap 3中的输入组类,我以我喜欢的方式附加该百分号来渲染它,但是我如何删除附加Symfony的百分号呢?

你必须覆盖symfony 2的默认表单主题。

首先,打开你的 app/config/config.yml 文件,然后编辑 twig 配置,如下所示:

twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"
    form:
      resources:
      - YourBundleName:Form:my-form-theme.html.twig

(这是重要的form.resources部分)。此配置将告诉Symfony 2使用您的自定义主题。

如果您不想在配置文件中添加某些内容,也可以在模板中使用{% form_theme form 'YourBundleName:Form:my-form-theme.html.twig' %},但我不喜欢在所有表单中添加此行,因此我更喜欢将其添加到全局配置中。

现在,您必须创建一个包含以下内容的文件src/YourBundlePath/Resources/views/Form/my-form-theme.html.twig

{% extends 'form_div_layout.html.twig' %}
{% block percent_widget -%}
    {% set type = type|default('text') %}
    {{- block('form_widget_simple') -}}
{%- endblock percent_widget %}

这应该有效。

如果你打开Symfony 2(/vendor/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig)的主题文件,你可以看到有:

{% block percent_widget -%}
    {% set type = type|default('text') %}
    {{- block('form_widget_simple') -}} %
{%- endblock percent_widget %}

我删除了覆盖中 3d 行上的"%"。

问候

你不能删除它,它的缺点之一 符号形式 % char 是硬编码的

{% block percent_widget -%}
    {% set type = type|default('text') %}
    {{- block('form_widget_simple') -}} %
{%- endblock percent_widget %}

您可以编写自己的块,其中您将删除%

您只需覆盖模板中的表单主题即可。有几种方法可以做到这一点。

我将使用最快的。

您的模板最终会如下所示:

{% form_theme edit_form _self %}
        {% block percent_widget %} 
            {% spaceless %} 
                {% set type = type|default('text') %} 
                {{ block('form_widget_simple') }} 
            {% endspaceless %} 
        {% endblock percent_widget %} 
<div class="form-group">
    {{ form_label(edit_form.discountRate, 'Discount', {'label_attr':{'class':'col-sm-2 control-label'}}) }}
    <div class="col-sm-10">
        <div class="input-group">
            {{ form_widget(edit_form.discountRate, {'attr': {'class':'form-control'}}) }}
            <div class="input-group-addon">%</div>
        </div>                  
    </div>         
</div>

好吧,不需要重写模板,这个想法是使用 jQuery/JS 进行前端删除。大多数时候,您的输入嵌入在div中,而twig正在生成您喜欢的内容:

<div class="a"> <input ...> % </div>

可以使用本机 JS lastChild/removeChild 函数访问和删除 '%' 文本:

$('.a').removeChild($('.a').lastChild) (jQuery/JS mix)

document.getElementsByClassname(a).removeChild(document.getElementsByClassname(a).lastChild)(普通香草JS)