Symfony 3.4, MoneyType и Bootstrap

#php #symfony #bootstrap-4

#php #симфония #bootstrap-4

Вопрос:

У меня возникли некоторые трудности с оформлением MoneyType формы ввода так, как я хочу. Я хочу использовать input-group-addon класс Bootstrap для добавления знака доллара к полю, но на самом деле происходит то, что отображаются два знака доллара … один автоматически генерируется MoneyType , а другой я вручную написал в своем шаблоне:

Шаблон:

 <div class="form-group">
    {{ form_label(form.canonicalPrice) }}
    {{ form_errors(form.canonicalPrice) }}
    <div class="input-group">
        <span class="input-group-addon">

lt;/span>
{{ form_widget(form.canonicalPrice, { 'attr': {'id': 'price', 'class': 'form-control'} }) }}
</div>
</div>

MoneyType определение в моем классе типов форм:

 ->add('canonicalPrice', MoneyType::class, array('label' => 'Price', 'currency' => 'USD'))
 

Скриншот:

введите описание изображения здесь

Итак, есть ли у меня способ либо:

  1. Скрыть автоматическую метку валюты, которую Symfony добавляет в MoneyType поле? Не указывая никакой валюты, по умолчанию используется евро, а не доллар, что бесполезно.
  2. Оформите автоматическую метку так, как я хочу?

Примечание: я не использую темы загрузочных форм Symfony, потому что мне нравится иметь полный контроль над своими шаблонами. Тот факт, что MoneyType в полях по умолчанию отображается валюта, очень раздражает.

Комментарии:

1. Вы должны иметь возможность расширять MoneyType и переопределять то, что вы хотите там.

Ответ №1:

Создайте автоматическую метку :

Знак доллара, который добавляется к входным данным, взят из атрибута money_pattern MoneyType, поэтому, как указано в документе MoneyType, вы можете :

Измените в нем представление :

 {{ form_row(form.value, { 'money_pattern': '{{ widget }} 

или вот так

 {% block money_widget %}
    {%- set type = type|default('number') -%}
    {{ parent() }}
{% endblock %}
 

Измените его в сборщике :

Используйте money_pattern в FormType и задайте нужный шаблон.


}) }}
или вот так


Измените его в сборщике :

Используйте money_pattern в FormType и задайте нужный шаблон.