|
@@ -1,35 +1,39 @@
|
|
|
KnpMenu
|
|
|
=======
|
|
|
|
|
|
-The admin comes with `KnpMenu <https://github.com/KnpLabs/KnpMenu>`_ integration
|
|
|
-It integrates a menu with the KnpMenu library. This menu can be a SonataAdmin service or a route of a custom controller.
|
|
|
+The admin comes with `KnpMenu <https://github.com/KnpLabs/KnpMenu>`_ integration.
|
|
|
+It integrates a menu with the KnpMenu library. This menu can be a SonataAdmin service, a menu created with a Knp menu provider or a route of a custom controller.
|
|
|
|
|
|
Add a custom controller entry in the menu
|
|
|
-----------------------------------------
|
|
|
|
|
|
To add a custom controller entry in the admin menu:
|
|
|
|
|
|
-Create your controller
|
|
|
+Create your controller:
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
- /**
|
|
|
- * @Route("/blog", name="blog_home")
|
|
|
- */
|
|
|
- public function blogAction()
|
|
|
+ class BlogController
|
|
|
{
|
|
|
- // ...
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * @Route("/blog", name="blog_home")
|
|
|
+ */
|
|
|
+ public function blogAction()
|
|
|
+ {
|
|
|
+ // ...
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * @Route("/blog/article/{articleId}", name="blog_article")
|
|
|
- */
|
|
|
- public function ArticleAction($articleId)
|
|
|
- {
|
|
|
- // ...
|
|
|
+ /**
|
|
|
+ * @Route("/blog/article/{articleId}", name="blog_article")
|
|
|
+ */
|
|
|
+ public function ArticleAction($articleId)
|
|
|
+ {
|
|
|
+ // ...
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-Add the controller route as an item of the menu
|
|
|
+
|
|
|
+Add the controller route as an item of the menu:
|
|
|
|
|
|
.. code-block:: yaml
|
|
|
|
|
@@ -49,7 +53,7 @@ Add the controller route as an item of the menu
|
|
|
label: Article
|
|
|
...
|
|
|
|
|
|
-Also you can override the template of knp_menu used by sonata. The default one is `SonataAdminBundle:Menu:sonata_menu.html.twig`:
|
|
|
+You can also override the template of knp_menu used by sonata. The default one is `SonataAdminBundle:Menu:sonata_menu.html.twig`:
|
|
|
|
|
|
.. code-block:: yaml
|
|
|
|
|
@@ -59,4 +63,34 @@ Also you can override the template of knp_menu used by sonata. The default one i
|
|
|
knp_menu_template: ApplicationAdminBundle:Menu:custom_knp_menu.html.twig
|
|
|
...
|
|
|
|
|
|
-And voilà, now you have a new menu group which contains an entry to sonata_admin_id, to your blog and to a specific article.
|
|
|
+And voilà, now you have a menu group which contains a link to a sonata admin via its id, to your blog and to a specific article.
|
|
|
+
|
|
|
+Using a menu provider
|
|
|
+---------------------
|
|
|
+
|
|
|
+As seen above, the main way to declare your menu is by declaring items in your sonata admin config file. In some case you may have to create a more complexe menu depending on your business logic. This is possible by using a menu provider to populate a whole menu group. This is done with the ``provider`` config value.
|
|
|
+
|
|
|
+Tthe following configuration uses a menu provider to populate the menu group ``my_group``:
|
|
|
+
|
|
|
+.. code-block:: yaml
|
|
|
+
|
|
|
+ sonata_admin:
|
|
|
+ dashboard:
|
|
|
+ groups:
|
|
|
+ my_group:
|
|
|
+ provider: 'MyBundle:MyMenuProvider:getMyMenu'
|
|
|
+ icon: '<i class="fa fa-edit"></i>'
|
|
|
+
|
|
|
+With KnpMenuBundle you can create a custom menu by using a builder class or by declaring it as a service. Please see the `Knp documentation <http://symfony.com/doc/current/bundles/KnpMenuBundle/index.html#create-your-first-menu>`_ for further information.
|
|
|
+
|
|
|
+In sonata, whatever the implementation you choose, you only have to provide the menu alias to the provider config key:
|
|
|
+
|
|
|
+* If you are using a builder class, your menu alias should be something like ``MyBundle:MyMenuProvider:getMyMenu``.
|
|
|
+* If you are using a service, your menu alias is the alias set in the ``knp_menu.menu`` tag. In the following example this is ``my_menu_alias``:
|
|
|
+ .. code-block:: xml
|
|
|
+
|
|
|
+ <service id="my_menu_provider" class="MyBundle/MyDirectory/MyMenuProvider">
|
|
|
+ <tag name="knp_menu.menu" alias="my_menu_alias" />
|
|
|
+ </service>
|
|
|
+
|
|
|
+Please note that when using the provider option, you can't set the menu label via the configuration. It is done in your custom menu.
|