Desarrollo de Aplicaciones

Cómo utilizar Symfony con un solo Bundle

Una de las novedades de Symfony 4, cuya aparición será a finales de este año, es que no utilizará Bundles propios. Los Bundles seguirán existiendo, pero únicamente de terceros que actualmente se instalan en la carpeta Vendors.

Cómo utilizar Symfony con un solo Bundle

Hasta ahora uno de los pilares de Symfony eran los Bundles, desarrollabas tu aplicación dentro de uno o varios Bundles, pudiendo crear tantos como quisieras. A partir de aquí aparecieron tres puntos de vista:

  1. No utilizar Bundles
  2. Utilizar Bundles con moderación agrupando en grandes funcionalidades
  3. Utilizar tantos Bundles como funcionalidades hubieran en la aplicación

No utilizar bundles es la versión oficial adoptada por las buenas prácticas de Symfony. Uno de los motivos de adoptar este sistema es el rendimiento, porque cuantos más Bundles, menor rendimiento.

Por ello, la mayoría de usuarios desarrollan siguiendo la primera o segunda opción, pero todo apunta que esto cambiará.

Esta novedad trae cierta controversia, porque entonces estamos convirtiendo Symfony en una especie de Laravel, Silex… dónde todas las funcionalidades están agrupadas en el mismo lugar.

Lo cierto es que actualmente en Symfony 3 podemos trabajar en el Bundle que viene por defecto “AppBundle” y segmentar la aplicación dentro de ese Bundle en distintos directorios que agrupen diversas funcionalidades. Entonces, sin utilizar más Bundles que el que viene por defecto conseguimos segmentar la aplicación sin perjudicar al rendimiento.

Por ejemplo, imaginemos que queremos crear una agrupación de código para generar las funcionalidades del administrador de la web. Dentro de AppBundle podemos crear un directorio llamado Admin y dentro añadir todos los directorios que tendría un Bundle.

  • AppBundle
    • Admin
      • Controller
      • Entity
      • EventListener
      • Form

Ahora tenemos dos puntos críticos:

  • Controladores
  • Entidades

Tenemos que indicar a Symfony que ahí están los controladores y entidades. Para ejecutar un controlador únicamente seguiremos esta sintaxis en la ruta, en la que especificamos la ubicación de la clase sin atajos y el nombre del método completo a ejecutar al entrar en la ruta:

daw_inmobiliaria_homepage_2:
    path:     /test
    defaults: { _controller: AppBundle\Admin\Controller\FalseController::indexAction }

Y para las entidades vamos al fichero de configuración de Symfony y añadimos en “mappings” el directorio dónde tiene que buscar las entidades:

orm:
    auto_generate_proxy_classes: '%kernel.debug%'
    naming_strategy: doctrine.orm.naming_strategy.underscore
    auto_mapping: true
    mappings:
      Admin:
        type: annotation
        is_bundle: false
        dir: %kernel.root_dir%/../src/AppBundle/Admin/Entity
        prefix: AppBundle\Admin\Entity
        alias: AppBundleAdmin

Comparte este artículo

Artículos Relacionados