2015-11-17 1 views
9

J'ai créé une page Sonata personnaliséeAjouter personnalisée route page Sonata à la barre de navigation

d'itinéraire simple

medapp_adminStreamCommands: 
    path:  /admin/stream 
    defaults: { _controller: MedAppBundle:VideoChat/VideoChat:adminStreamCommands } 

contrôleur qui retourne la piscine admin

public function adminStreamCommandsAction(Request $request) 
    { 

     return $this->render('@MedApp/AdminSonata/Stream/stream_commands.html.twig', array(
      'admin_pool' => $this->get('sonata.admin.pool'))); 
    } 

modèle de la vue

{% extends '@MedApp/AdminSonata/standard_layout.html.twig' %} 

{% block content %} 
foobar 
{% endblock content 

Cela fonctionne, je c un accès sur mon site Web avec /admin/foo et je reçois une page qui a le modèle d'administration Sonata avec mon contenu «foobar».

Ma question est, comment puis-je ajouter cette route à la barre de navigation gauche et supérieure sans avoir à modifier le modèle par défaut? En effet, le menu de gauche est rendu par un menu KNP:

{% block side_bar_nav %} 
    {% if app.user and is_granted('ROLE_SONATA_ADMIN') %} 
     {{ knp_menu_render('sonata_admin_sidebar', {template: admin_pool.getTemplate('knp_menu_template')}) }} 
    {% endif %} 
{% endblock side_bar_nav %} 

Et je dois en quelque sorte d'ajouter ma nouvelle page à fournir par ce menu.

Normalement, une page est ajoutée par un service, mais ceux-ci sont construits au-dessus d'une entité:

servicename: 
    class: Bundle\Class 
    arguments: [~, Bundle\Entity\Entityname, ~] 
    tags: 
     - { name: sonata.admin, manager_type: orm, group: admin, label: CustomName} 

Ma page n'utilise pas une entité, mais, tout le contenu ou le contenu statique qui ne dépend pas sur une entité.

Je sais déjà que je peux modifier les blocs qui génèrent les menus, mais je pensais que le meilleur moyen serait d'ajouter ma classe en tant que service étiqueté comme sonata.admin qui n'a pas de manager_type, en Autrement dit, n'est pas une entité. Comment cela peut-il être fait?

Répondre

1

Je ne pense pas que ce soit possible, vous devez créer une nouvelle mise en page, copiez le sonata admin layout et personnalisez-le selon vos besoins.

Vous pouvez modifier la disposition utilisée en changeant la configuration yml pour sonata_admin (templates -> layout) ou extending the SonataAdmin bundle et en créant votre propre layout.html.twig.

+0

Je l'ai déjà fait. Cependant, j'ai besoin de générer le menu en fonction des routes du pool d'administration et de mes propres pages personnalisées. Je pensais que sonata avait un moyen de le faire à travers le fichier yml ou d'une autre manière plus facile plutôt que de m'avoir pour créer mon propre menu. J'imagine que je ne suis pas le premier à vouloir une fonctionnalité similaire, mais je n'ai trouvé aucun exemple qui le fasse. –

+0

Je ne sais pas s'il y a une autre façon que de créer votre propre menu, vous pouvez également définir vos propres liens en vérifiant l'itinéraire actuel de votre page et ajouter votre propre HTML, c'est une façon de le faire mais ça marchera. – HypeR

+0

En effet. Une autre façon aurait été de définir une classe Admin pour un modèle qui n'est pas une entité liée à l'ORM. J'ai vu des discussions à ce sujet mais encore une fois, je n'ai trouvé aucun exemple sur la façon de le faire. Cela fonctionnerait avec certitude car je peux ajouter des routes à la collection de routines du modèle actuel et implémenter des actions personnalisées. Malheureusement, c'est quelque chose que je n'ai pas pu trouver ou si c'est même possible. –

2

Vous devez remplacer standard_layout et modifier le contenu du bloc side_bar_nav. C'est un moyen simple et rapide. Ou vous pouvez creuser en code sonate pour trouver comment injecter quelque chose dans admin_pool.dashboardgroups - amusez-vous :)

+0

Je sais, c'est ce que l'autre réponse a dit. Je cherchais des façons d'utiliser des entités qui ne sont pas liées à l'ORM. De cette façon, je peux définir mes propres données personnalisées pour le panneau d'administration, mais le menu l'inclurait toujours car il s'agirait d'un service avec la balise sonata.admin. –