123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- Extensions
- ==========
- Admin extensions allow you to add or change features of one or more Admin instances. To create an extension your class
- must implement the interface ``Sonata\AdminBundle\Admin\AdminExtensionInterface`` and be registered as a service. The
- interface defines a number of functions which you can use to customize the edit form, list view, form validation,
- alter newly created objects and other admin features.
- .. code-block:: php
- use Sonata\AdminBundle\Admin\AbstractAdminExtension;
- use Sonata\AdminBundle\Form\FormMapper;
- class PublishStatusAdminExtension extends AbstractAdminExtension
- {
- public function configureFormFields(FormMapper $formMapper)
- {
- $formMapper
- ->add('status', 'choice', array(
- 'choices' => array(
- 'draft' => 'Draft',
- 'published' => 'Published',
- ),
- ))
- ;
- }
- }
- Configuration
- ~~~~~~~~~~~~~
- There are two ways to configure your extensions and connect them to an admin.
- You can include this information in the service definition of your extension.
- Add the tag *sonata.admin.extension* and use the *target* attribute to point to
- the admin you want to modify. Please note you can specify as many tags you want.
- Set the *global* attribute to *true* and the extension will be added to all admins.
- The *priority* attribute is *0* by default and can be a positive or negative integer.
- The higher the priority, the earlier it's executed.
- .. configuration-block::
- .. code-block:: yaml
- services:
- app.publish.extension:
- class: AppBundle\Admin\Extension\PublishStatusAdminExtension
- tags:
- - { name: sonata.admin.extension, target: app.admin.article }
- - { name: sonata.admin.extension, target: app.admin.blog }
- app.order.extension:
- class: AppBundle\Admin\Extension\OrderAdminExtension
- tags:
- - { name: sonata.admin.extension, global: true }
- app.important.extension:
- class: AppBundle\Admin\Extension\ImportantAdminExtension
- tags:
- - { name: sonata.admin.extension, priority: 5 }
- The second option is to add it to your config.yml file.
- .. configuration-block::
- .. code-block:: yaml
- # app/config/config.yml
- sonata_admin:
- extensions:
- app.publish.extension:
- admins:
- - app.admin.article
- Using the ``config.yml`` file has some advantages, it allows you to keep your configuration centralized and it provides some
- extra options you can use to wire your extensions in a more dynamic way. This means you can change the behaviour of all
- admins that manage a class of a specific type.
- admins:
- specify one or more admin service ids to which the Extension should be added
- excludes:
- specify one or more admin service ids to which the Extension should not be added (this will prevent it matching
- any of the other settings)
- extends:
- specify one or more classes. If the managed class of an admin extends one of the specified classes the extension
- will be added to that admin.
- implements:
- specify one or more interfaces. If the managed class of an admin implements one of the specified interfaces the
- extension will be added to that admin.
- instanceof:
- specify one or more classes. If the managed class of an admin extends one of the specified classes or is an instance
- of that class the extension will be added to that admin.
- uses:
- Requires PHP >= 5.4.0. Specify one or more traits. If the managed class of an admin uses one of the specified traits the extension will be
- added to that admin.
- priority:
- Can be a positive or negative integer. The higher the priority, the earlier it’s executed.
- .. configuration-block::
- .. code-block:: yaml
- # app/config/config.yml
- sonata_admin:
- extensions:
- app.publish.extension:
- admins:
- - app.admin.article
- implements:
- - AppBundle\Publish\PublishStatusInterface
- excludes:
- - app.admin.blog
- - app.admin.news
- extends:
- - AppBundle\Document\Blog
- instanceof:
- - AppBundle\Document\Page
- uses:
- - AppBundle\Trait\Timestampable
|