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 .
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 .
I am looking for to override the BaseMediaBundle to custom for exemple the function "configureListFields".
I already override the controller of this bundle, but not the BaseMediaAdmin.
The problem with this code is the entity "Media" disapear of my dashboard !
//In my 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
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
I Google It but nothing found. Any one know ?
Thanks!
you must override %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
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,
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)
<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
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)
{
//
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.