Sonata Admin Bundle - 自定义模板

时间:2018-02-12 15:50:19

标签: php templates bundle sonata

我想要我的模板。

service.yml:

admin.globaux:
        class: AppBundle\Admin\ParametreAdmin
        arguments: [~, AppBundle\Entity\ParametreEntity, ~]
        tags:
            - { name: sonata.admin, manager_type: orm, group: Options, label: Globaux}
        calls:
            - [ setTemplate, [list, "@SonataAdmin/CRUD/Special/list_parametre_globaux.html.twig"]]
        public: true

list_parametre_globaux.html.twig:

{% extends base_template %}

    <div>
        {{ object.pourcentageMise }}
    </div>

我有这个错误:

(1/1)ServiceNotFoundException 服务“admin.globaux”依赖于不存在的服务“SonataAdmin / CRUD / Special / list_parametre_globaux.html.twig”。

我不明白为什么它不起作用。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您正在尝试拨打服务,这就是您的邮件错误所说的内容。

calls:
    - [ setTemplate, [list, "@SonataAdmin/CRUD/Special/list_parametre_globaux.html.twig"]]

“@”语法是为服务注入而设计的。

这是您应该编写模板调用的方式:

calls:
    - [ setTemplate, [list, "SonataAdminBundle:CRUD/Special:list_parametre_globaux.html.twig"]]

这意味着您的自定义模板位于

vendor/sonata-admin/admin-bundle/Resources/views/CRUD/Special/list_parametre_globaux.html.twig

将文件放在供应商文件夹中不是一个好主意,您应该将其放在

src/AppBundle/Resources/views/CRUD/Special/list_parametre_globaux.html.twig

然后你的service.yml中的模板调用将是

calls:
    - [ setTemplate, [list, "AppBundle:CRUD/Special:list_parametre_globaux.html.twig"]]

此外,在文件list_parametre_globaux.html.twig中,您不应该

{% extends base_template %}

但是

{% extends 'SonataAdminBundle:CRUD:base_list.html.twig' %}

这是用于列表操作的树枝模板。 如果您检查位于

中的原始模板
vendor/sonata-admin/admin-bundle/Resources/views/CRUD/base_list.html.twig
你会看到不同的块。您可以通过在自定义树枝模板中写入一些代码来覆盖每个块。

{% block name_of_block %}
{% endblock name_of_block}

如果你只想添加东西而不是覆盖整个块,你可以这样做

{% block name_of_block %}
    enter code here
    {{parent ()}}
{% endblock name_of_block}

最后,如果您只想覆盖块的一部分,则必须在自定义树枝模板中复制/粘贴整个base_block,然后重写特定部分。