Sonata Media Bundle删除图库

时间:2014-02-27 21:24:53

标签: symfony-sonata sonata-media-bundle

我安装了Sonata Media Bundle,但我没有使用该套装的图库部分。

如何禁用图库?

我正在使用Symfony 2.3,我根据文档安装了标准的Media Bundle。

迄今为止的解决方案:

如果您从管理包中查看此问题https://github.com/sonata-project/SonataAdminBundle/issues/460,可以通过将show_in_dashboard: false标记添加到yaml文件来禁用管理员。

要做到这一点,我只需添加我自己的编译器,然后为我添加这个标志:

  1. 创建编译器:http://symfony.com/doc/current/components/dependency_injection/tags.html

  2. 将编译器添加到您的软件包中:http://symfony.com/doc/2.3/cookbook/service_container/compiler_passes.html

  3. 你完成了。如果有更好的解决方案,我很乐意听到它。

    编译器示例:

    namespace YourBundle\DependencyInjection\Compiler;
    
    use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    
    class OverrideMediaGalleryCompilerPass implements CompilerPassInterface
    {
    
        /**
         * You can modify the container here before it is dumped to PHP code.
         *
         * @param ContainerBuilder $container
         *
         * @api
         */
        public function process( ContainerBuilder $container )
        {
            $definition = $container->getDefinition( 'sonata.media.admin.gallery' );
            if ( $definition ) {
                /**
                 * The purpose here is to disable the sonata admin gallery from showing up
                 * in the dashboard. This goes through and adds show_in_dashboard parameter
                 * that disables this.
                 */
                if ( $definition->hasTag( 'sonata.admin' ) ) {
                    $tags                             = $definition->getTag( 'sonata.admin' );
                    $tags[ 0 ][ 'show_in_dashboard' ] = false;
                    $definition->clearTag( 'sonata.admin' );
                    $definition->addTag( 'sonata.admin', $tags[ 0 ] );
                }
            }
        }
    }
    

4 个答案:

答案 0 :(得分:4)

只需将以下服务配置添加到您的config.ymlsonata_admin.yml文件中,即可从管理面板中停用图库和媒体菜单,或使用 config 目录中的services.yml文件从 dependencyInjection

加载它
#Application/Sonata/MediaBundle/DependencyInjection/ApplicationSonataMediaExtension.php
<?php

namespace Application\Sonata\MediaBundle\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;

/**
 * This is the class that loads and manages your bundle configuration
 *
 * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
 */
class ApplicationSonataMediaExtension extends Extension
{
    /**
     * {@inheritDoc}
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }
}

如果您只想删除图库菜单

,请仅使用sonata.media.admin.gallery:服务
#Application/Sonata/MediaBundle/Resources/config/services.yml
#Disable gallery & media menu from admin panel
services:
    sonata.media.admin.media:
        class: %sonata.media.admin.media.class%
        tags:
            - { name: sonata.admin, manager_type: orm, show_in_dashboard: false, label_catalogue: %sonata.media.admin.media.translation_domain% , label_translator_strategy: sonata.admin.label.strategy.underscore }
        arguments:
            - ~
            - %sonata.media.admin.media.entity%
            - %sonata.media.admin.media.controller%
            - "@sonata.media.pool"
        calls:
            - [setModelManager, ["@sonata.media.admin.media.manager"]]
            - [setTranslationDomain, [%sonata.media.admin.media.translation_domain%]]
            - [setTemplates, [{ inner_list_row: SonataMediaBundle:MediaAdmin:inner_row_media.html.twig , base_list_field: SonataAdminBundle:CRUD:base_list_flat_field.html.twig , list: SonataMediaBundle:MediaAdmin:list.html.twig , edit: SonataMediaBundle:MediaAdmin:edit.html.twig }]]

    sonata.media.admin.gallery:
        class: %sonata.media.admin.gallery.class%
        tags:
            - { name: sonata.admin, manager_type: orm, show_in_dashboard: false, label_catalogue: %sonata.media.admin.media.translation_domain% , label_translator_strategy: sonata.admin.label.strategy.underscore }
        arguments:
            - ~
            - %sonata.media.admin.gallery.entity%
            - %sonata.media.admin.gallery.controller%
            - "@sonata.media.pool"
        calls:
            - [setTranslationDomain, [%sonata.media.admin.media.translation_domain%]]
            - [setTemplates, [{ list: SonataMediaBundle:GalleryAdmin:list.html.twig }]]

然后清除缓存以反映更改

php app/console cache:clear

答案 1 :(得分:1)

我通过在sonata.yaml中列出信息中心允许的项目来实现此目的,有效地隐藏了图库:

sonata_admin:
    dashboard:
        groups:
            sonata_media:
                label: "Media Library"
                label_catalogue: SonataMediaBundle
                items:
                    - sonata.media.admin.media

答案 2 :(得分:0)

为什么不编辑app \ config \ sonata \ sonata_admin.yml文件结束注释或删除包含sonata.media.admin.gallery的行?

答案 3 :(得分:0)

编辑奏鸣曲媒体配置文件的最快捷方式 - 但是 - 脏的方式:

供应商/奏鸣曲项目/媒体束/资源/配置/ doctrine_orm_admin.xml

你只需添加这个

show_in_dashboard="false"

在服务sonata.media.admin.gallery

的tag属性中
    <tag name="sonata.admin" show_in_dashboard="false"  manager_type="orm" group="sonata_media" label="gallery" label_catalogue="%sonata.media.admin.gallery.translation_domain%" label_translator_strategy="sonata.admin.label.strategy.underscore"/>

如果使用mongodb或phpcr,则编辑相应的文件。

你也可以在同一个文件中为sonata.media.admin.media服务做同样的事情,所以&#34; Media&#34;管理员中的阻止将消失。但是服务仍然可以启用,因此您可以在自己的实体管理中将您的图片作为子实体进行管理。

我希望这会帮助别人,因为我花了30分钟才找到合适的文件......