我使用Sonata Admin 3.13和Symfony 3.1,并希望在列表视图中显示上传的图像。我有一个带有以下ListFields的PaintingAdmin:
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
)
您需要告诉Sonata您正在使用自定义模板。
您可以在管理服务声明中执行此操作:
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
我建议你使用模板的完整路径:app / Resources / views / sonata / imagepreview.html.twig
->add('imageFilename', null, [
'template' => 'sonata\imagepreview.html.twig',
'label' => 'Bild'
]);
所以,正如你可以sonata\imagepreview.html.twig
相对于app / Resources / views /文件夹。
在版本<4.x的symfony中,我们有两种放置树枝模板的方法:
RealPath: `src\AppBundle\Resources\views\MyCustomFolder\my_file.html.twig`
Path: `AppBundle::MyCustomFolder\my_file.html.twig`
RealPath: `app\Resources\views\MyCustomFolder\my_file.html.twig`
Path: `MyCustomFolder\my_file.html.twig`
您可以在Official Symfony documantation中阅读更多内容