2012-05-29 8 views
5

Soy nuevo en el desarrollo web con Symphony2 (aunque definitivamente no es nuevo en el desarrollo web) y estoy a punto de comenzar un proyecto de tamaño mediano, que se dividirá en paquetes , ya que cada instalación de la aplicación puede tener una configuración diferente de la funcionalidad disponible.Symfony 2 - Generar entradas de menú a partir de paquetes disponibles

Me gustaría generar mi navegación dinámicamente a partir de los paquetes disponibles, p. si el paquete "foo" está activo, debería aparecer una entrada de menú con una ruta a la acción del controlador principal foo.

Normalmente, mi opinión sobre esto sería crear un singleton en alguna parte, que luego llenaría durante la función load() de un paquete, y durante el renderizado, generaría el singleton.

Pero symfony2 ofrece mucha flexibilidad en esta parte, por lo que actualmente estoy evaluando si puede haber una manera mejor.

¿Podrían los servicios ser un camino a seguir aquí? O eventos? ¿O algo con inyección de dependencia, para que los paquetes obtengan una instancia de NavigationConfigurationElement en el momento de la construcción?

Cualquier comentario o comentario sobre esto, o tal vez algunos enlaces a ejemplos de cómo hacer esto, sería muy apreciado.

Saludos, Jens

Respuesta

6

i que la mejor forma de hacerlo, es el uso de etiquetas de inyección de dependencias. Deberá crear una extensión de inyección de dependencia y ofrecer una "etiqueta" que los diversos paquetes puedan usar para registrar sus entradas de menú.

No le describiré todo el proceso aquí porque hay muchos recursos sobre eso en Internet.

pero para darle un contorno rápido de lo que debe hacer

  1. implementar un servicio de celebración de las entradas del menú (el singleton dónde hablando)
  2. proceso de la etiqueta mediante la implementación de un pase del compilador, este compilador pase buscará todos los servicios etiquetados con la clase de navegación y los registrará con el servicio de menú
  3. crear una función de rama que usará el servicio para recuperar el menú y procesarlo
  4. escribir paquetes que usan la etiqueta y proporcionar elementos de menú

aquí están algunos recursos que te pueden ayudar:

http://symfony.com/doc/current/components/dependency_injection/tags.html http://miguel.ibero.me/es/post/2012-04-28/adding-tags-to-symfony.html

estoy actualmente la implementación de un paquete de Solr de Symfony que utiliza etiquetas de DI también. Tengo una clase llamada IndexManager que maneja varios índices de solr de diferentes paquetes. Utilizo la etiqueta DI para que otros paquetes puedan registrar contenido/entidades que desean indexar en sol. el principio es el mismo que con los elementos del menú.

ver aquí: https://github.com/roomthirteen/Room13SolrBundle

los archivos importantes son:

añadiendo el pase del compilador: https://github.com/roomthirteen/Room13SolrBundle/blob/master/Room13SolrBundle.php el compilador mismo paso: https://github.com/roomthirteen/Room13SolrBundle/blob/master/DependencyInjection/Compiler/SolrCompilerPass.php

espero que ayude. ¿más questins? no dudes en preguntar

+0

Eso suena muy interesante, y probablemente como la forma más fácil de hacerlo. Lo verificaré y lo intentaré, y me pondré en contacto contigo si funcionó como pensé. ¡Demasiado por tu aporte! – jhoffrichter

+0

no hay problema si crees que esta respuesta es correcta, por favor márcala;) – room13

+0

Tan pronto como lo haya evaluado, lo haré :) – jhoffrichter

Cuestiones relacionadas