2012-03-18 13 views
22

Estoy comenzando con un proyecto Symfony2. Conozco los conceptos básicos del framework, pero tengo una pregunta: ¿Dónde está el lugar correcto para crear esas clases de ayuda que creo para ayuda o para la lógica de negocios?Symfony2 donde colocar clases personalizadas de ayuda

+2

sabes por el bien de completarlo ... sería agradable para el resto de la comunidad si realmente otorgas una respuesta correcta a una de las siguientes respuestas, y luego explica cómo has implementado la solución y si funcionó bien para ti al final. SO es todo acerca de dar y recibir, no solo tomar – abbood

Respuesta

13

La respuesta de Max es correcta. Sin embargo, cuestiono el camino que recomienda para su código.

Las siguientes clases y archivos tienen emplazamientos específicos:

Extensiones de servicio de contenedores (pertenecen a) DependencyInjection/

de http://symfony.com/doc/current/cookbook/bundles/best_practices.html

que dice que sus servicios deben ser colocados en una carpeta llamado 'DependencyInjection', no 'Servicios'. En su totalidad, debe ser src/Foo/BarBundle/DependencyInjection

lo digo como alguien que tenía la anterior y acaba de terminar todos ellos moviéndose a este último (!)

+8

Está equivocado, debe almacenar extensiones DI en DependencyInjection, no los servicios en sí. http://symfony.com/doc/current/best_practices/business-logic.html – PachinSV

+0

Estoy de acuerdo con @PachinSV. Esta página lo menciona explícitamente: http://symfony.com/doc/current/cookbook/bundles/extension.html –

2

Puede crear las clases personalizadas en su paquete, como en una carpeta Helper/.. Sin embargo, para usar esos ayudantes en su código, deberá definir esos auxiliares en su archivo de descripción del servicio (como services.xml) ... Entonces puede usar $ container-> get ('your_helper') ->

5

La mejor manera de mantener la lógica de negocios es crear un servicio para manejar toda la lógica. Por lo que será en:

src/Foo/BarBundle/Service 

y hay que llamar al servicio en el services.yml.

3

Hace poco hice un pequeño trabajo sobre un proyecto Symfony2 existente. Según lo descrito por respuesta de Tuong Le, creé mis Clases de ayuda en el directorio Helper del nombre del paquete y la clase con ayudante sufijo es decir, la clase de ayuda se encuentra en:

src/MyBundle/Helper/MyUtilHelper.php 

puedo usar MyUtilHelper clase en mi paquete sin llamar el contenedor de servicio, es decir, no tuve que llamar.

$container->get('my_util'); 

Realmente no sé si hay alguna configuración especial. en mi configuración; alguien ya lo configuró y estaba agregando nuevas funcionalidades.

0

De acuerdo con la documentación oficial - en particular - Symfony Buenas Prácticas - usted debe almacenar sus servicios en Utilidades carpeta bajo la src. Creo que esta es la forma correcta, independientemente de si desea o no hacer que la funcionalidad proporcionada por los servicios de su paquete esté disponible para otras partes de la aplicación a través de Service Container.Además, puede almacenar clases de ayuda en cualquier lugar que considere adecuado. En cuanto a las respuestas de @Adam Knowles y @PachinSV, no son del todo acertadas porque no responden a su pregunta: "¿Dónde está el lugar adecuado para crear esas clases de ayuda que creo para ayudar o para la lógica de negocios?" o "Dónde almacenar las clases que deseo registrar y usar a través del Contenedor de servicios" - pero no dónde poner Paquete clase de extensión - cuyo propósito principal es proporcionar información sobre la configuración que debe ser cargado automáticamente desde su paquete a las aplicaciones Service Container durante el proceso de arrancando el Kernel.

Cuestiones relacionadas