Как я могу добавить поле валюты в список со строкой валюты, полученной из данных?

#sonata-admin

#sonata-администратор

Вопрос:

(Добавить currency поле в виде списка довольно просто

 protected function configureShowFields(ShowMapper $showMapper)
    {
        $showMapper
            ->add('price', 'currency', [
                'currency' => 'EUR',
                'locale' => 'fr',
            ])
        ;
    }
  

Но что, если моя строка валюты (EUR, USD, …) исходит из самих данных (иначе говоря, не как во фрагменте, а из поля из таблицы DB)?

могу ли я каким-либо образом ввести currency строку?

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

1. Смотрите это: sonata-project.org/bundles/intl/master/doc/reference /…

Ответ №1:

Вы можете установить пользовательский шаблон для своего элемента, а затем получить доступ к своему объекту в нем.

     protected function configureShowFields(ShowMapper $showMapper)
    {
        $showMapper
            ->add('price', 'currency', [
                'currency' => 'EUR',
                'locale' => 'fr',
                'template' =>  '@AdminTemplates/sonata/show_currency.html.twig',
            ])
        ;
    }
  
 {# @AdminTemplates/sonata/show_currency.html.twig #}
{% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %}

{%- block field -%}
    {% spaceless %}
        {%- if value is null -%}
            amp;nbsp;
        {%- else -%}
        {{ value|localizedcurrency(object.currencyField) }}
        {%- endif -%}
    {% endspaceless %}
{%- endblock field -%}
  

В этом примере я использую localizedcurrency из расширения Twig Intl

Если вы используете SonataIntlBundle, ваш шаблон может расширять show_currency.html.twig, и, возможно, вы смогли бы переопределить currency параметр поля.

Надеюсь, это поможет

Ответ №2:

решение @Picoss работает с Symfony 6.1 и Sonata Admin 4.18, используя этот show_currency.html.twig шаблон:

 {% extends '@SonataAdmin/CRUD/base_list_field.html.twig' %}

{%- block field -%}
        {%- if value is null -%}
            amp;nbsp;
        {%- else -%}
            {{ value|format_currency(field_description.option('currency')) }}
        {%- endif -%}
{%- endblock field -%}