Bueno, como ya han notado todos aquellos que han descargado symfony2 y seguido “The Book” y que también pueden leerlo en español, gracias a Juan Pablo Sepulveda por mandarme este link para copartirlo con ustedes, es una guía que está muy completa y recomiendo leerla detalladamente, te inicializa en symfony 2 creando tu proyecto dentro del directorio “src” dentro de la copia que descargaste de Symfony2, hasta acá ningún problema ya que como tutorial es bastante útil, pero nace la siguiente necesidad: “Yo necesito tener varias aplicaciones de Symfony2 con distintos Bundles y no quiero una gran aplicación dentro del paquete de Symfony2 con un montón de bundles mezclados”.

El problema

Esto sugiere 2 inconvenientes:

  1. Si quiero tener varias aplicaciones tendré que repetir el código fuente de Symfony2 que pesa no menos de 35 MB (tamaño considerable)
  2. Si quiero actualizar la versión de Symfony2 por fallos de seguridad y otros bugs tendré que hacerlo en cada copia

esto al final se vuelve un caos a la hora de tener algo en producción.

La solución

¡Divide y venceras! y ¿como lo hago?

Bueno entrando en las entrañas de como está confeccionada la aplicación que biene por defecto en Symfony2 en el directorio “app” ahí podrás solucionarlo. Pero en realidad no, no te preocupes por esto ya que yo ya realice este trabajo por ti para ahorrarte ese tiempo,

Armé este proyecto de Symfony2 baseAppSymfony2 que se constituye como una base para empezar cualquier desarrollo de una nueva aplicación de symfony 2. La estructura es muy sencilla, tiene un directorio “app” otro “src” y otro “web”.

“app”: acá estará toda la configuración de nuestra aplicación.

“src”: acá estará todos los bundles que creeemos para nuestra aplicación.

“web”: la tipica carpeta web de Symfony donde debe apuntar tu configuración de tu servidor web Ej.: apache2

Esta es la lista de directorios que internamente tiene la aplicación base para Symfony2:

64K	baseAppSymfony2/web/bundles/webprofiler/images/profiler
128K	baseAppSymfony2/web/bundles/webprofiler/images
16K	baseAppSymfony2/web/bundles/webprofiler/css
152K	baseAppSymfony2/web/bundles/webprofiler
28K	baseAppSymfony2/web/bundles/sensiodistribution/webconfigurator/images
20K	baseAppSymfony2/web/bundles/sensiodistribution/webconfigurator/css
52K	baseAppSymfony2/web/bundles/sensiodistribution/webconfigurator
56K	baseAppSymfony2/web/bundles/sensiodistribution
52K	baseAppSymfony2/web/bundles/framework/images
16K	baseAppSymfony2/web/bundles/framework/css
72K	baseAppSymfony2/web/bundles/framework
284K	baseAppSymfony2/web/bundles
332K	baseAppSymfony2/web
12K	baseAppSymfony2/src/Base/HomeBundle/DependencyInjection
8,0K	baseAppSymfony2/src/Base/HomeBundle/Resources/views/Default
12K	baseAppSymfony2/src/Base/HomeBundle/Resources/views
12K	baseAppSymfony2/src/Base/HomeBundle/Resources/config
28K	baseAppSymfony2/src/Base/HomeBundle/Resources
8,0K	baseAppSymfony2/src/Base/HomeBundle/Controller
8,0K	baseAppSymfony2/src/Base/HomeBundle/Tests/Controller
12K	baseAppSymfony2/src/Base/HomeBundle/Tests
68K	baseAppSymfony2/src/Base/HomeBundle
72K	baseAppSymfony2/src/Base
76K	baseAppSymfony2/src
8,0K	baseAppSymfony2/app/Resources/views
12K	baseAppSymfony2/app/Resources
4,0K	baseAppSymfony2/app/logs
4,0K	baseAppSymfony2/app/cache
36K	baseAppSymfony2/app/config
132K	baseAppSymfony2/app
544K	baseAppSymfony2/

Como pueden ver esta aplicación pesa tan sólo 544K mucho mejor que los 35MB de Symfony2.

Que permite esto:

  1. ahorrar espacio en disco.
  2. portar más facilmente el código de nuestro proyecto.
  3. y otras cosas más que nos facilita el tener un código ligero

Existen unos subdirectorios dentro del directorio web/bundles/ estos subdirectorios contienen sólo archivos de imagenes y estilos para que la apariencia del la configuración y el  gestor de tu aplicación mientras estas en el ambiente de desarrollo (dev) se vea “Bonita” y te recomeindo dejarlos allí ya que es muy util esta herramienta que biene con Symfony2 y es mucho más completa que la de symfony 1.4

En el directorio “src” cree un simple bundle src/Base/HomeBundle que es solamente muestra un texto al cargar la aplicación via web, para que sepas que esta todo funcionando OK, esto lo puedes quitar si lo deseas de la misma forma como esta documentado en el Book de Symfony2

y por último el directorio “app” este directorio es muy importante ya que aca se encuntran las configuraciones de nuestra aplicación, entre ellas las rutas de donde se encuentran los frameworks, la conexiones a las bases de datos que tengamos, etc…. Dentro de este directorio encontraremos un archivo muy importante que es el principal actor a la hora de desentralizar nuestro proyecto, este archivo es autoload.php este archivo define las rutas de donde se encuentra cada framework que utiliza nuestra aplicación entre ellos Symfony2. Para el caso prácticos no tendrás que desgastarte en configurar este archivo adecuadamente porque yo ya lo he hecho por ti. Si abres este archivo encontrarás una constante definida como __SFDIR__ que he creado para que allí especifiques la ruta de donde descomprimiste Symfony2, eso es todo lo que debes hacer en este archivo y listo no pienses en hacer nada más y como esto es una base te recomiendo entonces hacer una copia de baseAppSymfony2:

cp -r baseAppSymfony2 miproyecto

como pueden ver todo se resume a editar __SFDIR__ y copiar baseAppSymfony2 tantas veces quieras como aplicaciones necesites y todas se enlazaran con la misma copia de Symfony2

Adjunto entonces el proyecto base, está comprimido en tar.bz2 que lo pueden descomprimir fácilmente en linux y en OSX y en windows con Winrar http://db.tt/zwAKw9k

Espero sus comentarios y también que les sea muy util.

Anuncios