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 a ``services.xml``.
* With a tag attribute, less verbose :
.. code-block:: xml
AcmeBundle\ProjectBundle\Entity\Project
* With a method call, more verbose
.. code-block:: xml
AcmeBundle\ProjectBundle\Entity\Project
If you want to create your own RouteBuilder, you can do it using code like
* xml service registration
.. code-block:: xml
* 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');
}
}
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: #method name, you can find the list in the table above
sonata.order.admin.order: #id of the admin service's
model_manager: sonata.order.admin.order.manager #id of the your service
Admin Extension
---------------
Configure the default page and ordering in the list view
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Configuring the default page and ordering column can simply be achieved by overriding
the ``datagridValues`` array property. All three keys ``_page``, ``_sort_order`` and
``_sort_by`` can be omitted.
.. code-block:: php
1, // Display the first page (default = 1)
'_sort_order' => 'DESC', // Descendant ordering (default = 'ASC')
'_sort_by' => 'updated' // name of the ordered field (default = the model id field, if any)
// the '_sort_by' key can be of the form 'mySubModel.mySubSubModel.myField'.
);
// ...
}
Inherited classes
-----------------
You can manage inherited classes by injected 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');
}
}