Com extreure el domini de la vostra aplicació del directori src de Symfony2

Una bona practica per quan es desenvolupa un projecte es, mantenir la lògica de negoci (domini) totalment independent de la resta de la lògica de la aplicació, mantenint-lo net de referencies a qualsevol servei o framework i aixi, poder reutilitzar-lo en qualsevol altre aplicació sense tenir-lo que editar.

Però, en el cas d’utilitzar Symfony2 en els teus projectes, aquest ve configurat per defecte per a que el codi este dintre de un bundle dintre del directory src. En el cas de que sempre utilitzis Symfony per als teus projectes no tindràs cap problema, per si utilitzes altres frameworks de php, probablement aquest utilitzaran altres estructures de directoris per lo que no podràs reutilitzar el teu domini en aquest sense editar-lo.

Per poder configurar Symfony2 per a que trobi les teves classes fora del directori src segueix les següents passos:

Crea un directori en la arrel del projecte (normalment jo el anomeno Domini però li podeu posar el nom que mes us agradi) i afegeix totes les classes que siguin del domini de la teva aplicació dintre d’aquest directori. No oblideu modificar els namespaces de aquestes classes, a mes a mes de les referencies a aquestes dintre de l’aplicació que les utilitzi.

Per exemple, tenim un projecte amb la següent estructura:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
app /
bin /
Domini/ 
├── Core 
│   └── Product.php 
├── Exceptions 
│   └── ProductException.php 
├── Factories 
│   └── ProductFactory.php 
└── Tests 
      ├── Core 
      │   └── ProductItemTest.php 
      └── Factories 
        └── ProductFactoryTest.php 
src/ 
└── ProjectTest
    └── TestBundle /
vendor/ 
web/

Esta bastant resumit però, es un exemple per a millor comprensió. En ell podeu veure que el domini es a la arrel del projecte però fora del directori src i no te cap referencia amb el framework.

Per a que Symfony pugui trobar les classes del nostre domini, tenim que registrar-les en el loader.

Hi ha dos maneres de fer aixo, depenent de si les classes del vostre domini compleixen l’estàndard PSR4 o el PSR0

si compleixen l’estàndard PSR4, editeu el fitxer /app/autoload.php afegint les següent línia abans del return.

1
$loader->addPsr4('nom_del_domini_utilitzat_als_namespaces\\', 'ruta_absoluta_fins_les_classes_del_domini');

En el cas del exemple anterior:

1
$loader->addPsr4('Domini\\', __DIR__.'/../Domini');

Si les vostres classes compleixen l’estàndard PSR0, editeu el fitxer /app/autoload.php afegint les següent línia abans del return.

1
$loader->add('nom_del_domini_utilitzat_als_namespaces\\', 'ruta_absoluta_fins_les_classes_del_domini');

A continuació, editeu el fitxer composer.json i afegiu a la clau autoload el nom del domini i la rua relativa al domini des-de l’arrel del projecte.

Si el teu domini compleix l’estàndard PSR4

1
2
3
4
    "autoload": {
        "psr-0": { "": "src/", "SymfonyStandard": "app/" },
        "psr-4": { "nom_del_domini\\": "ruta_relativa_des-de_la_arrel_del_projecte_al_domini/"}
    },

En el cas del exemple:

1
2
3
4
    "autoload": {
        "psr-0": { "": "src/", "SymfonyStandard": "app/" },
        "psr-4": { "Domini\\": "Domini/"}
    },

Si el teu domini compleix l’estàndard PSR0

1
2
3
    "autoload": {
        "psr-0": { "": "src/", "SymfonyStandard": "app/", "nombre_del domini \\": "ruta_relativa_des-de_la_arrel_del_projecte_al_domini/"}
    },

Una vegada finalitzada l’edició, executeu composer update per actualitzar el vostre projecte i, una vegada finalitzada, Symfony2 ja reconeixerà el vostre domini i podreu utilitzar les classes en el vostre projecte.

Aquesta configuració ha sigut testejada en la versió 2.6 de Symfony. Espero que us sigui d’utilitat.

Deixa un comentari

L'adreça electrònica no es publicarà Els camps necessaris estan marcats amb *