getting_started.rst 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. Getting started with SonataAdminBundle
  2. ======================================
  3. After installation of SonataAdminBundle you need to configure it for your models.
  4. Here is a quick checklist of what is needed to quickly setup SonataAdminBundle
  5. and create your first admin interface for the models of your application:
  6. * Step 1: Define SonataAdminBundle routes
  7. * Step 2: Setup the persistency service (ORM, ODM, ...)
  8. * Step 3: Create admin class
  9. * Step 4: Create admin service
  10. * Step 5: Configuration
  11. * Step 6: Security
  12. Step 1: Define SonataAdminBundle routes
  13. ---------------------------------------
  14. SonataAdminBundle contains several routes. Import them by adding the following
  15. code to your application's routing file:
  16. .. code-block:: yaml
  17. # app/config/routing.yml
  18. admin:
  19. resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml'
  20. prefix: /admin
  21. _sonata_admin:
  22. resource: .
  23. type: sonata_admin
  24. prefix: /admin
  25. .. note::
  26. If you're using XML or PHP to specify your application's configuration,
  27. the above routing configuration must be placed in routing.xml or
  28. routing.php according to your format (i.e. XML or PHP).
  29. At this point you can already access the admin dashboard by visiting the url:
  30. ``http://yoursite.local/admin/dashboard``.
  31. Step 2: Setup the persistence service (ORM, ODM, ...)
  32. -----------------------------------------------------
  33. SonataAdminBundle does not impose any persistency services (service for handling and
  34. controlling your models), however most likely your application will use some
  35. persistency services (like ORM or ODM for database and document stores) therefore
  36. you can use the following bundles officially supported by Sonata Project's admin
  37. bundle:
  38. * SonataDoctrineORMAdminBundle
  39. * SonataDoctrineMongoDBAdminBundle
  40. * SonataDoctrinePhpcrAdminBundle
  41. Propel users are warmly welcome to contribute and create a new bundle for Propel
  42. ORM that will be integrated in SonataAdminBundle.
  43. Install a persistency service you need and configure it according to their
  44. related documentation.
  45. Step 3: Create Admin class
  46. --------------------------
  47. Admin class represents mapping of your model and administration sections (forms,
  48. list, show). The easiest way to create an admin class for your model is to extend
  49. the ``Sonata\AdminBundle\Admin\Admin`` class. For filter, list and show views, you can
  50. target a sub model property thanks to the dot-separated notation
  51. (eg: ``mySubModel.mySubSubModel.myProperty``).
  52. Here is a simple example from the SonataNewsBundle:
  53. .. code-block:: php
  54. namespace Sonata\NewsBundle\Admin;
  55. use Sonata\AdminBundle\Admin\Admin;
  56. use Sonata\AdminBundle\Datagrid\ListMapper;
  57. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  58. use Sonata\AdminBundle\Form\FormMapper;
  59. class TagAdmin extends Admin
  60. {
  61. protected function configureFormFields(FormMapper $formMapper)
  62. {
  63. $formMapper
  64. ->add('name')
  65. ->add('enabled', null, array('required' => false))
  66. ;
  67. }
  68. protected function configureDatagridFilters(DatagridMapper $datagridMapper)
  69. {
  70. $datagridMapper
  71. ->add('name')
  72. ->add('posts')
  73. ;
  74. }
  75. protected function configureListFields(ListMapper $listMapper)
  76. {
  77. $listMapper
  78. ->addIdentifier('name')
  79. ->add('slug')
  80. ->add('enabled')
  81. ;
  82. }
  83. }
  84. Step 4: Create admin service
  85. ----------------------------
  86. To notify your administration of your new admin class you need to create an
  87. admin service and link it into the framework by setting the sonata.admin tag.
  88. Create either a new ``admin.xml`` or ``admin.yml`` file inside the ``MyBundle/Resources/config/`` folder:
  89. .. code-block:: xml
  90. <!-- MyBundle/Resources/config/admin.xml -->
  91. <container xmlns="http://symfony.com/schema/dic/services"
  92. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  93. xsi:schemaLocation="http://symfony.com/schema/dic/services/services-1.0.xsd">
  94. <services>
  95. <service id="sonata.admin.tag" class="YourNS\AdminBundle\Admin\BlogAdmin">
  96. <tag name="sonata.admin" manager_type="orm" group="Posts" label="Blog"/>
  97. <argument />
  98. <argument>YourNS\AdminBundle\Entity\Course</argument>
  99. <argument>SonataAdminBundle:CRUD</argument>
  100. <call method="setTranslationDomain">
  101. <argument>YourNSAdminBundle</argument>
  102. </call>
  103. </service>
  104. </services>
  105. </container>
  106. .. code-block:: yaml
  107. # MyBundle/Resources/config/admin.yml
  108. services:
  109. sonata.admin.tag:
  110. class: YourNS\AdminBundle\Admin\BlogAdmin
  111. tags:
  112. - { name: sonata.admin, manager_type: orm, group: posts, label: "Blog" }
  113. arguments:
  114. - ~
  115. - YourNS\AdminBundle\Entity\Course
  116. - 'SonataAdminBundle:CRUD'
  117. calls:
  118. - [ setTranslationDomain, [YourNSAdminBundle]]
  119. Now include your new configuration file in the framework (make sure that your ``resource`` value has the
  120. correct file extension depending on the code block that you used above):
  121. .. code-block:: yaml
  122. # app/config/config.yml
  123. imports:
  124. - { resource: @MyBundle/Resources/config/admin.xml }
  125. Or you can load the file inside with the Bundle's extension file using the ``load()`` method as described
  126. in the `symfony cookbook`_.
  127. .. code-block:: php
  128. # YourNS/AdminBundle/DependencyInjection/YourNSAdminBundleExtension.php for XML configurations
  129. use Symfony\Component\DependencyInjection\Loader;
  130. use Symfony\Component\Config\FileLocator;
  131. public function load(array $configs, ContainerBuilder $container) {
  132. // ...
  133. $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
  134. $loader->load('admin.xml');
  135. }
  136. .. code-block:: php
  137. # YourNS/AdminBundle/DependencyInjection/YourNSAdminBundleExtension.php for YAML configurations
  138. use Symfony\Component\DependencyInjection\Loader;
  139. use Symfony\Component\Config\FileLocator;
  140. public function load(array $configs, ContainerBuilder $container) {
  141. // ...
  142. $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
  143. $loader->load('admin.yml');
  144. }
  145. Step 5: Configuration
  146. ---------------------
  147. At this point you have basic administration for your model. If you wish to
  148. quickly customize your administration you can create some configuration options
  149. and change them according to your requirements:
  150. .. code-block:: yaml
  151. # app/config/config.yml
  152. sonata_admin:
  153. title: Sonata Project
  154. title_logo: /bundles/sonataadmin/logo_title.png
  155. templates:
  156. # default global templates
  157. layout: SonataAdminBundle::standard_layout.html.twig
  158. ajax: SonataAdminBundle::ajax_layout.html.twig
  159. # default actions templates, should extend a global templates
  160. list: SonataAdminBundle:CRUD:list.html.twig
  161. show: SonataAdminBundle:CRUD:show.html.twig
  162. edit: SonataAdminBundle:CRUD:edit.html.twig
  163. dashboard:
  164. blocks:
  165. # display a dashboard block
  166. - { position: left, type: sonata.admin.block.admin_list }
  167. Linking the admin class to the dashboard is done automatically because of the
  168. default option you defined above:
  169. .. code-block:: yaml
  170. dashboard
  171. blocks:
  172. # display a dashboard block
  173. - { position: left, type: sonata.admin.block.admin_list }
  174. However you can define only admin groups you want to show in the dashboard by:
  175. .. code-block:: yaml
  176. dashboard
  177. blocks:
  178. # display a dashboard block
  179. - { position: left, type: sonata.admin.block.admin_list }
  180. groups:
  181. sonata_page:
  182. label: Page
  183. items: ~
  184. More information can be found in the configuration chapter of this documentation.
  185. Step 6: Security
  186. ----------------
  187. The last important step is security. By default, the SonataAdminBundle does not
  188. come with any user management for ultimate flexibility, however it is most
  189. likely your application requires such feature. The Sonata Project includes a
  190. ``SonataUserBundle`` which integrates the very popular ``FOSUserBundle``. Please
  191. refer to the security section of this documentation for more information.
  192. That should be it! Read next sections fore more verbose documentation of the
  193. SonataAdminBundle and how to tweak it for your requirements.
  194. .. _`symfony cookbook`: http://symfony.com/doc/master/cookbook/bundles/extension.html#using-the-load-method