Я искал поисковые запросы, но я не мог найти способ удалить знак процента, который компонент формы (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:
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 строке в переопределении.
С уважением
Ну, не нужно переписывать шаблоны, идея состоит в том, чтобы сделать переднее удаление с помощью 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)
Вы не можете удалить его, его одна из минусов symfony form% 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>