Soy consciente de preguntas como esta , donde las personas tienden a discutir el concepto general de paquete de Symfony 2.
La cuestión es que, en una aplicación específica, como, por ejemplo, una aplicación similar a Twitter, ¿debería todo estar realmente dentro de un paquete genérico, como dicen los documentos oficiales ?
La razón por la que pregunto esto es porque cuando desarrollamos aplicaciones, en general, no queremos acoplar nuestro código a un marco de pegamento de pila completa.
Si desarrollo una aplicación basada en Symfony 2 y, en algún momento, decido que Symfony 2 no es realmente la mejor opción para mantener el desarrollo , ¿será un problema para mí?
Entonces, la pregunta general es: ¿por qué todo ser un paquete es algo bueno?
EDITAR # 1
Hace casi un año desde que hice esta pregunta, escribí un artículo para compartir mis conocimientos sobre este tema.
fuente
Respuestas:
He escrito una publicación de blog más completa y actualizada sobre este tema: http://elnur.pro/symfony-without-bundles/
No, no todo tiene que estar en un paquete. Podrías tener una estructura como esta:
src/Vendor/Model
- para modelos,src/Vendor/Controller
- para controladores,src/Vendor/Service
- para servicios,src/Vendor/Bundle
- para los paquetes, comosrc/Vendor/Bundle/AppBundle
,De esta manera, pondrías lo
AppBundle
único que es realmente específico de Symfony2. Si decide cambiar a otro marco más adelante, eliminará elBundle
espacio de nombres y lo reemplazará con el marco elegido.Tenga en cuenta que lo que sugiero aquí es para el código específico de la aplicación . Para paquetes reutilizables, todavía sugiero usar las mejores prácticas .
Mantener entidades fuera de paquetes
Para mantener las entidades
src/Vendor/Model
fuera de cualquier paquete, he cambiado ladoctrine
secciónconfig.yml
dea
Los nombres de las entidades, para acceder desde los repositorios de Doctrine, comienzan
Model
en este caso, por ejemploModel:User
,.Puede utilizar subespacios a entidades relacionadas con el grupo en conjunto, por ejemplo,
src/Vendor/User/Group.php
. En este caso, el nombre de la entidad esModel:User\Group
.Mantener a los controladores fuera de los paquetes
Primero, debe decirle a JMSDiExtraBundle que escanee la
src
carpeta en busca de servicios agregando esto aconfig.yml
:Luego define los controladores como servicios y los coloca bajo el
Controller
espacio de nombres:Tenga en cuenta que estoy usando mi ElnurAbstractControllerBundle para simplificar la definición de controladores como servicios.
Lo último que queda es decirle a Symfony que busque plantillas sin paquetes. Hago esto anulando el servicio de adivinanzas de plantilla, pero dado que el enfoque es diferente entre Symfony 2.0 y 2.1, proporciono versiones para ambos.
Anular el adivinador de plantillas de Symfony 2.1+
He creado un paquete que hace eso por ti.
Anular el oyente de la plantilla Symfony 2.0
Primero, defina la clase:
Y luego dile a Symfony que lo use agregando esto a
config.yml
:Usar plantillas sin paquetes
Ahora, puede usar plantillas de paquetes. Mantenlos debajo de la
app/Resources/views
carpeta. Por ejemplo, las plantillas para esas dos acciones del controlador de ejemplo anterior se encuentran en:app/Resources/views/User/add.html.twig
app/Resources/views/User/profile.html.twig
Cuando se refiera a una plantilla, simplemente omita la parte del paquete:
fuente
generate:doctrine:crud
por ejemplo, espera que la entidad (= modelo en el caso de elnur) esté dentro de un paquete para funcionar.Por supuesto, puede desacoplar su aplicación. Simplemente desarrolle como una biblioteca e
vendor/
intégrelo en la carpeta de Symfony (ya sea usandodeps
ocomposer.json
, dependiendo de si usa Symfony2.0 o Symfony2.1). Sin embargo, necesita al menos un paquete, que actúa como la "interfaz" de su biblioteca, donde Symfony2 encuentra el controlador (y tal).fuente
symfony-2.0
, supondré que usa la versión 2.0 actual. En este caso, crea un repositorio de git donde quieras y pon todo en él, lo que quieras desarrollar independientemente de Symfony. En su proyecto de Symfony, actualice sudeps
archivo como se menciona aquí symfony.com/doc/current/cookbook/workflow/… Luego, simplemente cree uno (o más) paquete (s) de aplicaciones (php app/console generate:bundle
) para el material específico de Symfony.Una distribución habitual de Symfony puede funcionar sin ningún paquete adicional (aplicación), dependiendo de la cantidad de funcionalidades que desee utilizar desde el marco de la pila completa.
Por ejemplo, sus controladores pueden ser invocables y pueden colocarse en cualquier lugar de la estructura de su proyecto, tan pronto como se carguen automáticamente.
En un archivo de definición de enrutamiento, puede usar:
Puede ser cualquier objeto php antiguo simple, solo vinculado al marco por el hecho de que tiene que devolver un
Symfony\Component\HttpFoundation\Response
objeto.Sus plantillas de ramita (u otras) se pueden poner como
app/Resources/views/template.html.twig
y se pueden representar con el::template.html.twig
nombre lógico.Todos los servicios DI pueden definirse en app / config / config.yml (o importarse de,
app/config/services.yml
por ejemplo, y todas las clases de servicio pueden ser también cualquier objeto php antiguo, no vinculado al marco en absoluto).Todo esto lo proporciona de forma predeterminada el framework de pila completa de Symfony.
Donde tendrá problemas es cuando desee utilizar archivos de traducción (como xliff), porque se descubren solo a través de paquetes .
La distribución Symfony-Light tiene como objetivo resolver este tipo de problemas descubriendo todo lo que generalmente se descubriría solo a través de paquetes.
fuente
Podría usar KnpRadBundle , que intenta simplificar la estructura del proyecto.
Otro enfoque es usar,
src/Company/Bundle/FrontendBundle
por ejemplo, para los paquetes ysrc/Company/Stuff/Class.php
para las clases que son independientes de Symfony y que podrían reutilizarse fuera del marcofuente
Bundle
va directamente a compartir públicamente. Cuando escribo alguna aplicación, no quiero compartir mi código, excepto aquellas partes que construí intencionalmente como módulos dirigidos por la comunidad. ¿Me equivoco?Como ya han pasado 5 años, aquí hay algunos artículos más sobre Symfony Bundles.
TLDR:
TLDR:
fuente
El framework Symfony es muy bueno para lanzar rápidamente una prueba de concepto y todo el código puede ingresar dentro de la aplicación de paquete predeterminada en src /
En este paquete, puede estructurar su código como desee.
Después, si desea utilizar otra tecnología para desarrollar su POC, puede traducirlo fácilmente porque no estructura todo su código en la concepción de paquetes.
Para todo el concepto, no lo extremas. El paquete es bueno, pero lo incluye todo y todos los días no es bueno.
Quizás pueda usar un Silex (Symfony micro framework) para desarrollar su Prueba de concepto para reducir el impacto del paquete de terceros.
fuente