Desenvolupament d'Aplicacions

Com utilitzar Symfony amb un sol Bundle

Una de les novetats de Symfony 4, l'aparició de les quals serà a la finals d'aquest any, és que no utilitzarà Bundles propis. Els Bundles seguiran existint, però únicament de tercers que actualment s'instal·len a la carpeta Vendors.

Com utilitzar Symfony amb un sol Bundle

Fins ara un dels pilars de Symfony eren els Bundles, desenvolupaves la teva aplicació dins d'un o diversos Bundles, podent crear tants com volguessis. A partir d'aquí van aparèixer tres punts de vista:

  1. No utilitzar Bundles
  2. Utilitzar Bundles amb moderació agrupant en grans funcionalitats
  3. Utilitzar tants Bundles com a funcionalitats haguessin a l'aplicació

No utilitzar bundles és la versió oficial adoptada per les bones pràctiques de Symfony. Un dels motius d'adoptar aquest sistema és el rendiment, perquè quants més Bundles, menor rendiment.

Per això, la majoria d'usuaris desenvolupen seguint la primera o segona opció, però tot apunta que això canviarà.

Aquesta novetat porta certa controvèrsia, perquè llavors estem convertint Symfony en una espècie de Laravel, Silex… on totes les funcionalitats estan agrupades en el mateix lloc.

La veritat és que actualment en Symfony 3 podem treballar en el Bundle que ve per defecte “AppBundle” i segmentar l'aplicació dins d'aquest Bundle en diferents directoris que agrupin diverses funcionalitats. Llavors, sense utilitzar més Bundles que el que ve per defecte aconseguim segmentar l'aplicació sense perjudicar al rendiment.

Per exemple, imaginem que volem crear una agrupació de codi per generar les funcionalitats de l'administrador de la web. Dins de AppBundle podem crear un directori anomenat Admin i dins afegir tots els directoris que tindria un Bundle.

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

Ara tenim dos punts crítics:

  • Controladors
  • Entitats

Hem d'indicar a Symfony que aquí estan els controladors i entitats. Per executar un controlador únicament seguirem aquesta sintaxi a la ruta, en la qual especifiquem la ubicació de la classe sense dreceres i el nom del mètode complet a executar en entrar a la ruta:

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

I per a les entitats anem al fitxer de configuració de Symfony i afegim a “mappings” el directori on ha de buscar les entitats:

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

Comparteix aquest article

Articles Relacionats