Sonata admin bundle:从全局搜索中排除自定义管理员

Posted

技术标签:

【中文标题】Sonata admin bundle:从全局搜索中排除自定义管理员【英文标题】:Sonata admin bundle: exclude custom admin from global search 【发布时间】:2019-06-05 03:35:23 【问题描述】:

在我的 Symfony 3.4 项目中,我有 2 个自定义管理员。专为报告服务而创建。这些管理员没有特定的实体。 对于自定义管理员,我遵循 Symfony 配方: https://symfony.com/doc/3.x/bundles/SonataAdminBundle/cookbook/recipe_custom_view.html

现在,通过奏鸣曲全局搜索搜索项目时,我得到一个

“类不存在”错误 vendor/sonata-project/admin-bundle/src/Resources/views/Core/search.html.twig.

此错误与自定义管理员有关。

是否有从全局搜索中排除这些自定义管理员或解决此错误的解决方案?

管理员:

<?php
namespace MainBundle\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Route\RouteCollection;

class AccessRightsAdmin extends AbstractAdmin 

    protected $baseRoutePattern = 'acces-s-rights';
    protected $baseRouteName = 'Acces-s-rights';

    protected function configureRoutes(RouteCollection $collection)
    
        $collection->clearExcept(array('list'));
        $collection->add('accesRights', 'acces-s-rights');
    

服务

services:         
    system.admin.acces-s-rights:
        class: MainBundle\Admin\AccessRightsAdmin
        arguments: [~, ~, MainBundle:AccessRightsAdmin]
        tags:
            -  name: sonata.admin, manager_type: orm, group: sonata.admin.group.System, label: Acces-s-rights 
        calls:
            - [ setTranslationDomain, [SonataAdminBundle]]
        public: true                  

【问题讨论】:

请发布您的服务定义和您的管理类 将代码添加到帖子中。 @de_bernie 你是怎么解决这个问题的? @de_bernie:你找到解决方案了吗?我的解决方法是覆盖 search.html.twig 并排除 if-block 中的特定管理员。 【参考方案1】:

我找到了一个解决方案,我将把它留在这里以备不时之需。 解决方案基本上是覆盖search.html.twig 并从搜索中忽略您想要的管理员,如下所示:

% extends base_template %

% block title % 'title_search_results'|trans('%query%': query, 'SonataAdminBundle') % endblock %
% block breadcrumb %% endblock %
% block content %
    <h2 class="page-header"> 'title_search_results'|trans('%query%': query, 'SonataAdminBundle') </h2>

    % if query is defined and query is not same as(false) %
        % set count = 0 %
        <div class="row" data-masonry=' "itemSelector": ".search-box-item" '>
            % for group in groups %
                % set display = group.roles is empty or is_granted(sonata_admin.adminPool.getOption('role_super_admin')) or group.roles|filter(role => is_granted(role))|length > 0 %

                % if display %
                    % for admin in group.items %
                        % set count = count + 1 %
                        % if admin.code != 'bundle.admin.admin_to_ignore' %# in this line right here add the admin you want to ignore in your search #
                            % if admin.hasRoute('create') and admin.hasAccess('create') or admin.hasRoute('list') and admin.hasAccess('list') %
                                 sonata_block_render(
                                    'type': 'sonata.admin.block.search_result'
                                , 
                                    'query': query,
                                    'admin_code': admin.code,
                                    'page': 0,
                                    'per_page': 10,
                                    'icon': group.icon
                                ) 
                            % endif %
                        % endif %
                    % endfor %
                % endif %
            % endfor %
        </div>
    % endif %

% endblock %

要覆盖该文件,您需要将其放在以下路径下:app -&gt; Resources -&gt; SonataAdminBundle -&gt; views -&gt; Core -&gt; search.html.twig

【讨论】:

以上是关于Sonata admin bundle:从全局搜索中排除自定义管理员的主要内容,如果未能解决你的问题,请参考以下文章

在sonata admin Bundle的List视图中添加新Button

Sonata Admin Bundle:按计数一对多关系排序

Sonata Admin Bundle + Sonata User Bundle:覆盖登录表单

Sonata Media Bundle 与 Sonata Admin Bundle 3.0(或 2.4)

Sonata Admin Bundle - 自定义模板

sonata-project/user-bundle dev-master 与 sonata-project/doctrine-orm-admin-bundle 冲突