Symfony3.1 & Sonata Admin - шаблон поля списка игнорируется

Я использую Sonata Admin 3.13 с Symfony 3.1 и хочу отображать загруженное изображение в списке. У меня есть PaintingAdmin со следующими ListFields:

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->addIdentifier('name', null, ['label' => 'Name'])
        ->add('category', null, ['label' => 'Kategorie'])
        ->add('size', null, ['label' => 'Größe'])
        ->add('imageFilename', null, [
            'template' => 'sonata:imagepreview.html.twig',
            'label' => 'Bild'
        ]);
    ;
}

И шаблон на app/Resources/views/sonata/imagepreview.html.twig

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
{% block field %}
    <div>
        {% if object.imageFilename != null %}
            <img src="{{ asset('uploads/images/' ~ object.imageFilename) }}" class="img-responsive" />
        {% else %}
            <div class="warn">Kein Bild</div>
        {% endif %}
    </div>
{% endblock %}

но шаблон полностью игнорируется, показывает только значение imageFilename. Все остальное работает нормально (т.е. label отображается как Bild)


person Sebus    schedule 12.02.2017    source источник
comment
вы нашли какое-нибудь решение? Я тоже сталкиваюсь с этой проблемой!   -  person SlimenTN    schedule 01.04.2019


Ответы (2)


Вам нужно сообщить Сонате, что вы используете собственный шаблон.

Вы можете сделать это в объявлении службы администратора:

librinfo_crm.admin.organism:
        class: Librinfo\CRMBundle\Admin\OrganismAdmin
        arguments: [~, Librinfo\CRMBundle\Entity\Organism, LibrinfoCRMBundle:OrganismAdmin]
        tags:
            -   name: sonata.admin
                manager_type: orm
                group: Customers Relationship Management
                label: librinfo.crm.organism_admin.label
                label_translator_strategy: blast_core.label.strategy.librinfo
        calls:
            - [ setTemplate, [list, LibrinfoCRMBundle:OrganismAdmin:list.html.twig]]

или вы можете переопределить массив $templates() вашего класса администратора.

Если вы хотите использовать «классическое» наследование шаблонов Symfony, ваш пользовательский шаблон должен иметь тот же путь и имя пути, что и исходный, поэтому, если вы пытаетесь заменить SonataAdminBundle:CRUD:base_list_field.html.twig, ваш пользовательский шаблон должен быть в app/Resources/view/CRUD/base_list_field.html.twig

person Mawcel    schedule 13.02.2017

Я предлагаю вам использовать полный путь к шаблону: app/Resources/views/sonata/imagepreview.html.twig

    ->add('imageFilename', null, [
        'template' => 'sonata\imagepreview.html.twig',
        'label' => 'Bild'
    ]);

Итак, как вы можете, sonata\imagepreview.html.twig относится к папке app/Resources/views/.

В symfony версии ‹ 4.x у нас есть два способа размещения шаблонов веток:

  1. #P4#
    RealPath: `src\AppBundle\Resources\views\MyCustomFolder\my_file.html.twig`
    
    Path: `AppBundle::MyCustomFolder\my_file.html.twig`
    
  2. #P5#
    RealPath: `app\Resources\views\MyCustomFolder\my_file.html.twig`
    
    Path: `MyCustomFolder\my_file.html.twig`
    

Вы можете прочитать больше в официальной документации по Symfony

person staskrak    schedule 27.12.2017