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?
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. –
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
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. –