Удалить знак процента в поле типа процента

0

Я искал поисковые запросы, но я не мог найти способ удалить знак процента, который компонент формы (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?

  • 0
    Не могли бы вы показать нам вывод html формы? Насколько я понимаю, поле типа процент отображает текстовый ввод, может быть, ваш браузер добавляет знак%?
Теги:
symfony-forms

4 ответа

0
Лучший ответ

Вы должны переопределить тему формы по умолчанию symfony 2.

Сначала откройте файл app/config/config.yml и отредактируйте конфигурацию ветки, чтобы иметь что-то вроде этого:

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

(Это form.resources часть 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 строке в переопределении.

С уважением

0

Ну, не нужно переписывать шаблоны, идея состоит в том, чтобы сделать переднее удаление с помощью jQuery/JS. В большинстве случаев ваш вход встроен в div, а веточка генерирует что-то, что вам нравится:

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

Текст "%" может быть доступен и удален с помощью встроенных функций JS lastChild/removeChild:

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

document.getElementsByClassname(a).removeChild(document.getElementsByClassname(a).lastChild) (простой ванильный JS)

0

Вы не можете удалить его, его одна из минусов symfony form% char жестко закодирована

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

Вы можете написать свой собственный блок, где вы удалите%

  • 0
    Конечно, переопределение темы формы является основной функцией Symfony 2.
0

Вам просто нужно переопределить тему формы в шаблоне. Есть несколько способов сделать это.

Я собираюсь использовать самые быстрые.

Ваш шаблон будет выглядеть следующим образом:

{% 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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню