搜索
管理员自带一个基本的全局搜索功能,位于顶部导航菜单中。搜索遍历管理类,并查找实现了 Sonata\AdminBundle\Search\SearchableFilterInterface
接口且方法 isSearchEnabled()
返回 true 的过滤器。如果你正在使用 SonataDoctrineORMBundle
,Sonata\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
自定义空结果框的可见性
默认情况下,所有管理员框都会显示在搜索结果中,看起来像这样

我们可以通过以下方式淡出没有结果的框
1 2 3 4 5
# config/packages/sonata_admin.yaml
sonata_admin:
global_search:
empty_boxes: fade
看起来像这样

第三个选项是隐藏空框
1 2 3 4 5
# config/packages/sonata_admin.yaml
sonata_admin:
global_search:
empty_boxes: hide
看起来像这样
