Sonata 管理包:从全局搜索中排除自定义管理

问题描述 投票:0回答:1

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

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

“类不存在”错误 供应商/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 = 'accessrights';
    protected $baseRouteName = 'Accessrights';

    protected function configureRoutes(RouteCollection $collection)
    {
        $collection->clearExcept(array('list'));
        $collection->add('accesRights', 'accessrights');
    }
}

服务

services:         
    system.admin.accessrights:
        class: MainBundle\Admin\AccessRightsAdmin
        arguments: [~, ~, MainBundle:AccessRightsAdmin]
        tags:
            - { name: sonata.admin, manager_type: orm, group: sonata.admin.group.System, label: Accessrights }
        calls:
            - [ setTranslationDomain, [SonataAdminBundle]]
        public: true                  
symfony sonata-admin symfony-3.4
1个回答
0
投票

我找到了一个解决方案,我将把它留在这里,以防有人需要。
解决方案基本上是覆盖

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 -> Resources -> SonataAdminBundle -> views -> Core -> search.html.twig

您还可以通过定义来覆盖 config_sonata.yml 中的模板

sonata_admin.templates.search: YourBundle:Location:Of:search.html.twig

© www.soinside.com 2019 - 2024. All rights reserved.