跳到内容

搜索

编辑此页

管理员自带一个基本的全局搜索功能,位于顶部导航菜单中。搜索遍历管理类,并查找实现了 Sonata\AdminBundle\Search\SearchableFilterInterface 接口且方法 isSearchEnabled() 返回 true 的过滤器。如果你正在使用 SonataDoctrineORMBundleSonata\DoctrineORMAdminBundle\Filter\StringFilter 过滤器是可搜索的,并依赖于 global_search 选项。

注意

如果你有很多实体,当前的实现可能会很昂贵,因为结果查询会执行 LIKE %query% OR LIKE %query%... 这样的操作。

禁用管理员搜索

你可以通过在你的管理定义中使用 sonata.admin 标签,并将 global_search 属性设置为 false 来禁用整个管理员的搜索功能。

1
2
3
<service id="app.admin.post" class="App\Admin\PostAdmin">
    <tag name="sonata.admin" global_search="false" model_class="App\Entity\Post" manager_type="orm" group="Content" label="Post"/>
</service>

自定义

配置搜索模板

主操作使用 @SonataAdmin/Core/search.html.twig 模板。每个搜索都由一个 block 处理,该 block 的模板是 @SonataAdmin/Block/block_search_result.html.twig

默认模板值可以在配置部分进行配置

1
2
3
4
5
6
7
# config/packages/sonata_admin.yaml

sonata_admin:
    templates:
        # other configuration options
        search:              '@SonataAdmin/Core/search.html.twig'
        search_result_block: '@SonataAdmin/Block/block_search_result.html.twig'

你还需要在 sonata block 配置中配置该 block

1
2
3
4
5
6
# config/packages/sonata_admin.yaml

sonata_block:
    blocks:
        sonata.admin.block.search_result:
            contexts: [admin]

你还可以在定义管理员时,为每个管理员配置 block 模板

1
2
3
4
5
6
7
<service id="app.admin.post" class="App\Admin\PostAdmin">
        <tag name="sonata.admin" model_class="App\Entity\Post" manager_type="orm" group="Content" label="Post"/>
        <call method="setTemplate">
            <argument>search_result_block</argument>
            <argument>@SonataPost/Block/block_search_result.html.twig</argument>
        </call>
    </service>

配置默认搜索结果操作

通常,搜索结果会生成一个指向项目 show 操作的链接;如果 show 路由被禁用或者你没有所需的权限,则会显示为文本。你可以通过覆盖以下选项来更改此行为

1
2
3
4
5
# config/packages/sonata_admin.yaml

sonata_admin:
    global_search:
        admin_route: edit

自定义空结果框的可见性

默认情况下,所有管理员框都会显示在搜索结果中,看起来像这样

Custom view

我们可以通过以下方式淡出没有结果的框

1
2
3
4
5
# config/packages/sonata_admin.yaml

sonata_admin:
    global_search:
        empty_boxes: fade

看起来像这样

Custom view

第三个选项是隐藏空框

1
2
3
4
5
# config/packages/sonata_admin.yaml

sonata_admin:
    global_search:
        empty_boxes: hide

看起来像这样

Custom view
这项工作,包括代码示例,均根据 Creative Commons BY-SA 3.0 许可协议获得许可。
目录
    版本