Advance ======= Service Configuration --------------------- When you create a new Admin service you can configure its dependencies, the services which are injected by default are: ========================= ============================================= Dependencies Service Id ========================= ============================================= model_manager sonata.admin.manager.%manager-type% form_contractor sonata.admin.builder.%manager-type%_form show_builder sonata.admin.builder.%manager-type%_show list_builder sonata.admin.builder.%manager-type%_list datagrid_builder sonata.admin.builder.%manager-type%_datagrid translator translator configuration_pool sonata.admin.pool router router validator validator security_handler sonata.admin.security.handler menu_factory knp_menu.factory route_builder sonata.admin.route.path_info label_translator_strategy sonata.admin.label.strategy.form_component ========================= ============================================= Note: %manager-type% is to be replaced by the manager type (orm, doctrine_mongodb...) You have 2 ways of defining the dependencies inside ``services.xml``: * With a tag attribute, less verbose: .. code-block:: xml Acme\ProjectBundle\Entity\Project * With a method call, more verbose .. code-block:: xml Acme\ProjectBundle\Entity\Project If you want to modify the service that is going to be injected, add the following code to your application's config file: .. code-block:: yaml # app/config/config.yml admins: sonata_admin: sonata.order.admin.order: # id of the admin service this setting is for model_manager: # dependency name, from the table above sonata.order.admin.order.manager # customised service id Creating a custom RouteBuilder ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To create your own RouteBuilder create the PHP class and register it as a service: * php Route Generator .. code-block:: php add('yourSubAction'); // Create button will dissappear, delete functionality will be disabled as well // No more changes needed! $collection->remove('create'); $collection->remove('delete'); } } * xml service registration .. code-block:: xml Inherited classes ----------------- You can manage inherited classes by injecting subclasses using the service configuration. Lets consider a base class named `Person` and its subclasses `Student` and `Teacher`: .. code-block:: xml YourNS\AdminBundle\Entity\Person YourNS\AdminBundle\Entity\Student YourNS\AdminBundle\Entity\Teacher You will just need to change the way forms are configured in order to take into account this new subclasses: .. code-block:: php getSubject(); $form->add('name'); if ($subject instanceof Teacher) { $form->add('course', 'text'); } elseif ($subject instanceof Student) { $form->add('year', 'integer'); } }