跳到内容

模板

编辑此页

SonataAdminBundle 附带了大量的 twig 文件,用于显示每个 Admin 操作页面的不同部分。如果您阅读过本指南架构部分的 Templates 部分,您现在应该知道这些文件是如何在 views 文件夹中组织的。如果您还没有阅读,现在是阅读的好时机。

除了这些之外,还有一些其他的视图文件是从存储层包含进来的。由于它们的内容和结构对于每个实现都是特定的,因此这里不讨论它们,但重要的是您要记住它们的存在,并且它们与直接包含在 SonataAdminBundle 中的视图文件一样重要。

全局模板

SonataAdminBundle 视图是使用 twig 文件实现的,并充分利用了其继承功能。因此,即使是最简单的页面实际上也是使用许多不同的 twig 文件渲染的。在该 twig 继承层次结构的末尾始终是以下两个文件之一

  • 布局: @SonataAdmin/standard_layout.html.twig
  • ajax: @SonataAdmin/ajax_layout.html.twig

正如您可能从它们的名称中猜到的那样,第一个用于“标准”请求,另一个用于 AJAX 调用。@SonataAdmin/standard_layout.html.twig 包含整个页面中存在的几个元素,例如徽标、标题、顶部菜单和菜单。它还包括整个管理部分使用的基本 CSS 和 JavaScript 文件和库。AJAX 模板不包含任何这些元素。

仪表盘模板

用于渲染仪表盘的模板也可以配置。有关更多信息,请参阅仪表盘页面

CRUDController 操作模板

如前所述,CRUDController 有几个操作,允许您操作您的模型实例。这些操作中的每一个都使用特定的模板文件来渲染其内容。默认情况下,SonataAdminBundle 对其匹配的操作使用以下模板

  • list : @SonataAdmin/CRUD/list.html.twig
  • show : @SonataAdmin/CRUD/show.html.twig
  • edit : @SonataAdmin/CRUD/edit.html.twig
  • history : @SonataAdmin/CRUD/history.html.twig
  • preview : @SonataAdmin/CRUD/preview.html.twig
  • delete : @SonataAdmin/CRUD/delete.html.twig
  • batch_confirmation : @SonataAdmin/CRUD/batch_confirmation.html.twig
  • acl : @SonataAdmin/CRUD/acl.html.twig

请注意,所有这些模板都扩展了其他模板,有些模板只做这件事。这种继承架构旨在帮助您通过在您自己的扩展包中扩展这些模板来进行自定义,而不是重写所有内容。

如果您仔细观察,所有这些模板最终都扩展了从控制器传递的 base_template 变量。此变量将始终采用上述全局模板之一的值,这就是对这些文件所做的更改如何影响整个 SonataAdminBundle 界面的方式。

行模板

通过自定义 inner_list_rowbase_list_field 模板,可以完全更改列表中每一行结果的渲染方式。有关此内容的更多信息,请参阅行模板 cookbook 条目。

其他模板

还有几个其他模板可以自定义,使您能够微调 SonataAdminBundle

  • user_block : 自定义默认在管理界面右上角渲染的 Twig 区块,其中包含用户信息。默认情况下为空,有关真实示例,请参阅 SonataUserBundle
  • add_block : 自定义默认在管理界面右上角渲染的 Twig 区块,提供对可用管理类上的创建操作的快速访问。
  • history_revision_timestamp: 自定义使用历史记录相关操作时时间戳的渲染方式。
  • action : 您可以用于自定义操作的通用模板
  • short_object_description : 由 HelperController 中的 getShortObjectDescriptionAction 操作使用,此模板显示模型实例的简短描述。
  • list_block : 用于渲染仪表盘的管理映射列表的模板。有关更多信息,请参阅仪表盘页面。
  • batch: 用于渲染列表中每个实例前面的复选框的模板。
  • select : 当加载列表视图作为 sonata_admin 表单类型的一部分时,此模板用于创建一个按钮,允许您选择匹配的行。
  • pager_links : 渲染在列表视图末尾显示的页码列表(当存在多个页面时)
  • pager_results : 渲染下拉菜单,让您可以在列表视图中选择每页的元素数量

配置模板

此模板结构的主要目标是使您可以方便地自定义您需要的模板。您可以在您自己的扩展包中扩展您想要的模板,并告诉 SonataAdminBundle 使用您的模板而不是默认模板。您可以通过多种方式做到这一点。

您可以在配置文件中指定您的模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# config/packages/sonata_admin.yaml

sonata_admin:
    templates:
        layout:                     '@SonataAdmin/standard_layout.html.twig'
        ajax:                       '@SonataAdmin/ajax_layout.html.twig'
        list:                       '@SonataAdmin/CRUD/list.html.twig'
        show:                       '@SonataAdmin/CRUD/show.html.twig'
        show_compare:               '@SonataAdmin/CRUD/show_compare.html.twig'
        edit:                       '@SonataAdmin/CRUD/edit.html.twig'
        history:                    '@SonataAdmin/CRUD/history.html.twig'
        preview:                    '@SonataAdmin/CRUD/preview.html.twig'
        delete:                     '@SonataAdmin/CRUD/delete.html.twig'
        batch:                      '@SonataAdmin/CRUD/list__batch.html.twig'
        acl:                        '@SonataAdmin/CRUD/acl.html.twig'
        action:                     '@SonataAdmin/CRUD/action.html.twig'
        select:                     '@SonataAdmin/CRUD/list__select.html.twig'
        filter:                     '@SonataAdmin/Form/filter_admin_fields.html.twig'
        dashboard:                  '@SonataAdmin/Core/dashboard.html.twig'
        search:                     '@SonataAdmin/Core/search.html.twig'
        batch_confirmation:         '@SonataAdmin/CRUD/batch_confirmation.html.twig'
        inner_list_row:             '@SonataAdmin/CRUD/list_inner_row.html.twig'
        base_list_field:            '@SonataAdmin/CRUD/base_list_field.html.twig'
        list_block:                 '@SonataAdmin/Block/block_admin_list.html.twig'
        user_block:                 '@SonataAdmin/Core/user_block.html.twig'
        add_block:                  '@SonataAdmin/Core/add_block.html.twig'
        pager_links:                '@SonataAdmin/Pager/links.html.twig'
        pager_results:              '@SonataAdmin/Pager/results.html.twig'
        tab_menu_template:          '@SonataAdmin/Core/tab_menu_template.html.twig'
        history_revision_timestamp: '@SonataAdmin/CRUD/history_revision_timestamp.html.twig'
        short_object_description:   '@SonataAdmin/Helper/short-object-description.html.twig'
        search_result_block:        '@SonataAdmin/Block/block_search_result.html.twig'
        action_create:              '@SonataAdmin/CRUD/dashboard__action_create.html.twig'
        button_acl:                 '@SonataAdmin/Button/acl_button.html.twig'
        button_create:              '@SonataAdmin/Button/create_button.html.twig'
        button_edit:                '@SonataAdmin/Button/edit_button.html.twig'
        button_history:             '@SonataAdmin/Button/history_button.html.twig'
        button_list:                '@SonataAdmin/Button/list_button.html.twig'
        button_show:                '@SonataAdmin/Button/show_button.html.twig'
        form_theme:                 []
        filter_theme:               []

警告

请注意,这是一个全局更改,这意味着它将自动影响所有模型映射,包括您定义的 Admin 映射和其他扩展包定义的 Admin 映射。

如果您愿意,您可以基于每个 Admin 映射指定自定义模板。在内部,CRUDController 从属于 AdminTemplateRegistry 类实例中获取此信息,因此您可以在 Admin 服务定义中指定要使用的模板

1
2
3
4
5
6
7
8
9
# config/services.yaml

services:
    app.admin.post:
        class: App\Admin\PostAdmin
        calls:
            - [setTemplate, ['edit', 'PostAdmin/edit.html.twig']]
        tags:
            - { name: sonata.admin, model_class: App\Entity\Post, manager_type: orm, group: 'Content', label: 'Post' }

注意

还存在一个 setTemplates(array $templates) (注意复数形式)方法,允许您一次设置多个模板。

使用 setTemplate()setTemplates() 方法所做的更改将覆盖在配置文件中所做的自定义设置,因此您可以指定全局自定义模板,然后在特定的 Admin 类上覆盖该自定义设置。

查找已配置的模板

每个 Admin 都有一个连接到它的 TemplateRegistry 服务,该服务保存通过上述配置注册的模板。通过该类的 getTemplate($name) 方法,您可以访问为该 Admin 设置的模板。TemplateRegistry 可以通过 $this->getTemplateRegistry()Admin 中访问。使用服务容器,可以在 Admin 外部访问模板注册表。使用 Admin 代码 + .template_registry 作为服务 ID(即“app.admin.post”使用模板注册表“app.admin.post.template_registry”)。

可以使用服务 ID "sonata.admin.global_template_registry" 访问保存全局模板的 TemplateRegistry 服务。

在 Twig 模板中,您可以使用 get_admin_template($name, $adminCode) 函数访问当前 Admin 的模板,或使用 get_global_template($name) 函数访问全局模板。

1
2
3
4
5
{% extends get_admin_template('base_list_field', admin.code) %}

{% block field %}
    {# ... #}
{% endblock %}
本作品,包括代码示例,根据Creative Commons BY-SA 3.0 许可协议获得许可。
目录
    版本