简体   繁体   English

Sonata Media Bundle Override

[英]Sonata Media Bundle Override

Can any one tell me How I can extends and Override all sonata Media Bundle functionality ? 任何人都可以告诉我如何扩展和覆盖所有奏鸣曲媒体捆绑功能? I am using Symfony2.3.3 and Sonata Master Bundle . 我正在使用Symfony2.3.​​3和Sonata Master Bundle。

I see this documentation http://sonata-project.org/bundles/media/master/doc/index.html and I know basic things like : How can write custom provider, translator and etc..basic things are working after installations but I do not know . 我看到这个文档http://sonata-project.org/bundles/media/master/doc/index.html我知道基本的东西:如何编写自定义提供程序,翻译器等等。基本的东西在安装后工作但是我不知道 。

I am looking for to override the BaseMediaBundle to custom for exemple the function "configureListFields". 我正在寻找覆盖BaseMediaBundle自定义为例如函数“configureListFields”。

I already override the controller of this bundle, but not the BaseMediaAdmin. 我已经覆盖了这个包的控制器,但没有覆盖BaseMediaAdmin。

The problem with this code is the entity "Media" disapear of my dashboard ! 这段代码的问题是我的仪表板实体“Media”消失了!

//In my services.xml : //在我的services.xml中:

<service id="sonata.media.admin.media" class="Application\Sonata\MediaBundle\Admin\MediaAdmin">
    <tag name="sonata.media.admin" manager_type="orm" group="Gestion des médias"
        label="Média" />
    <argument />
    <argument>Application\Sonata\MediaBundle\Entity\Media</argument>
    <argument>Application\SonataMediaBundle:MediaAdmin</argument>
    <call method="setTranslationDomain">
        <argument>SonataMediaBundle</argument>
    </call>
</service> 

//In my Application\\Sonata\\MediaBundle\\Admin\\MediaAdmin //在我的Application \\ Sonata \\ MediaBundle \\ Admin \\ MediaAdmin中

namespace Application\Sonata\MediaBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\MediaBundle\Provider\Pool;
use Sonata\MediaBundle\Form\DataTransformer\ProviderDataTransformer;

use Knp\Menu\ItemInterface as MenuItemInterface;

use Sonata\MediaBundle\Admin\BaseMediaAdmin as BaseMediaAdmin;


class MediaAdmin extends BaseMediaAdmin
{

/**
 * {@inheritdoc}
 */
protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->add('custom', 'string', array('template' =>  'SonataMediaBundle:MediaAdmin:list_custom.html.twig'))
        ->add('enabled', 'boolean', array('editable' => true))
        ->add('_action', 'actions', array(
            'actions' => array(
                'view' => array(),
                'edit' => array(),
                'delete' => array(),
            )
        ))
    ;
}

}

same question ask by some one: https://groups.google.com/forum/#!topic/sonata-users/l3D_Vrd0Hm4 同一个问题请问某人: https//groups.google.com/forum/#!topic / sonata-users / l3D_Vrd0Hm4

I Google It but nothing found. 我谷歌它但没有找到。 Any one know ? 谁知道?

Thanks! 谢谢!

you must override %sonata.media.admin.media.class% 你必须覆盖%sonata.media.admin.media.class%

YourSite/MediaBundle/Ressource/config/services.yml

` `

parameters:
    sonata.media.admin.media.class: YourSite\MediaBundle\Admin\MediaAdmin

services:
    custom_name.admin.media:
        class: %sonata.media.admin.media.class%
        arguments:
            - ~
            - YourSite\MediaBundle\Entity\Media
            - YourSiteMediaBundle:MediaAdmin
            - @sonata.media.pool
        tags:
            - {name: sonata.admin, manager_type: orm, group: admin, label: Médias}

` `

and in your app/config/config.yml 并在您的app/config/config.yml

imports:
/** ... **/
- { resource: @YourSiteMediaBundle/Resources/config/services.yml }


sonata_admin:
/** ... **/
dashboard:
    groups:
        /** ... **/
        Médias:
            items:
                - custom_name.admin.media
#               - sonata.media.admin.media

Simply you can re-declare the service sonata.media.admin.media with just a few changes, 只需稍加一些更改,您就可以重新声明服务sonata.media.admin.media

as follows, and this would facilitate you to customise all the way of a sonata-media-bundle (controller, admin even you can override the templates) 如下所示,这将有助于您自定义奏鸣曲媒体包的所有方式(控制器,管理员,甚至您可以覆盖模板)

This service declaration is picked from sonata-project/media-bundle/Resources/config/doctrine_orm_admin.xml 此服务声明是从sonata-project / media-bundle / Resources / config / doctrine_orm_admin.xml中选取的

<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

<parameters>
    <parameter key="sonata.media.admin.media.class">Application\Sonata\MediaBundle\Admin\MediaAdmin</parameter>
</parameters>
<services>
    <service id="sonata.media.admin.media" class="%sonata.media.admin.media.class%" public="true">
    <tag name="sonata.admin" manager_type="orm" group="%sonata.media.admin.groupname%" label_catalogue="%sonata.media.admin.media.translation_domain%" label="media" label_translator_strategy="sonata.admin.label.strategy.underscore" icon="%sonata.media.admin.groupicon%"/>
    <argument/>
    <argument>%sonata.media.admin.media.entity%</argument>
    <argument>%sonata.media.admin.media.controller%</argument>
    <argument type="service" id="sonata.media.pool"/>
    <argument type="service" id="sonata.media.manager.category" on-invalid="null"/>
    <call method="setModelManager">
        <argument type="service" id="sonata.media.admin.media.manager"/>
    </call>
    <call method="setTranslationDomain">
        <argument>%sonata.media.admin.media.translation_domain%</argument>
    </call>
    <call method="setTemplates">
        <argument type="collection">
            <argument key="inner_list_row">@SonataMedia/MediaAdmin/inner_row_media.html.twig</argument>
            <argument key="outer_list_rows_mosaic">@SonataMedia/MediaAdmin/list_outer_rows_mosaic.html.twig</argument>
            <argument key="base_list_field">@SonataAdmin/CRUD/base_list_flat_field.html.twig</argument>
            <argument key="list">@SonataMedia/MediaAdmin/list.html.twig</argument>
            <argument key="edit">@SonataMedia/MediaAdmin/edit.html.twig</argument>
        </argument>
    </call>
</service>

import this service to config.yml 将此服务导入config.yml

imports:
    - { resource: "@ApplicationSonataMediaBundle/Resources/config/service.xml" }

your admin class 你的管理员课程

namespace Application\Sonata\MediaBundle\Admin;

use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\DoctrineORMAdminBundle\Filter\ChoiceFilter;
use Sonata\MediaBundle\Admin\ORM\MediaAdmin as MediaBaseAdmin;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;

class MediaAdmin extends MediaBaseAdmin
{
    ...

    /**
     * {@inheritdoc}
     */
    public function configureListFields(ListMapper $listMapper)
    {
        // parent::configureListFields($listMapper);
    }

    /**
     * {@inheritdoc}
     */
    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
           //
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM