【问题标题】:Sonata Media Bundle remove gallerySonata Media Bundle 删除画廊
【发布时间】:2014-03-31 14:31:24
【问题描述】:

我已安装 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

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

编译器示例:

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 ] );
            }
        }
    }
}

【问题讨论】:

    标签: symfony-sonata sonata-media-bundle


    【解决方案1】:

    我通过在sonata.yaml 中列出仪表板允许的项目来实现这一点,有效地隐藏了图库:

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

    【讨论】:

      【解决方案2】:

      编辑奏鸣曲媒体配置文件的最快方式——但——肮脏的方式:

      vendor/sonata-project/media-bundle/Resources/config/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 服务执行相同的操作,这样管理员中的所有“媒体”块都会消失。但这些服务仍处于启用状态,因此您可以在自己的实体管理员中将图片作为子实体进行管理。

      我希望这会对某人有所帮助,因为我花了 30 分钟才找到正确的文件...

      【讨论】:

        【解决方案3】:

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

        #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
        

        【讨论】:

        • 全局配置中的参数尚不可用,因此我将服务放在 SonataMediaBundle 的“子”捆绑包中。然后它就像一个魅力
        • 使用适当的方式编辑了禁用媒体和图库菜单的答案
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2019-03-19
          • 2016-09-03
          • 1970-01-01
          • 2018-01-16
          • 2016-09-28
          • 1970-01-01
          • 2013-04-24
          • 2016-04-24
          • 2016-11-28
          相关资源
          最近更新 更多