Štruktúra Symfony aplikácie

, Štítky: PHP, Symfony

Fabien Potencier pred nedávnom prestavil oficiálne Best Practises pre Symfony. Jedná sa o niekoľko doporučení ktoré vývojárom uľahčia prácu a držia sa pragmatickej filozofie celého frameworku.

Hneď v prvej kapitole je vysvetlená štruktúra aplikácie postavenej na Symfony. Táto štruktúra je v podstate od verzie 2.0 rovnaká (aj keď sa o jej zmene už diskutovalo) a všetkým ktorým prišlo Symfony pod ruky známa.

S jednou drobnou zmenou, ale v best practices prišli – a tou je štruktúra zložky src/. Donedávna bola preferovaná štruktúra src/Acme/BlogBundle alebo ukecanejšia src/Acme/Bundle/BlogBundle, ktorá pripomínala Java svet. V best practices je tak trochu alibisticky uvedené, že vývojári to zle pochopili, keď na každú featuru vytvárajú vlastný bundle (UserBundle, ProductBundle, InvoiceBundle …). To, že to tak bolo na každom mieste v dokumentácii, návodoch, demo aplikácii atď. nie je zmienené. Vo výsledku tak aplikácia vyzerala takto:

demo/
├─ app/
├─ src/
│  └─ Acme/
│      ├─ ProductBundle/  
│      │   ├─ Controller/
│      │   │   └─ ProductController.php
│      │   └─ Resources/
│      │       ├─ views/
│      │       │   └─ Product/
│      │       │       ├─ list.html.twig
│      │       │       └─ view.html.twig
│      │       │
│      │       ├─ translations/
│      │       │   ├─ messages.sk.yml
│      │       │   └─ messages.en.yml
│      │       │
│      │       ├─ config/
│      │       │   └─ services.yml
│      │       │   
│      │       └─ public/
│      │           ├─ css/
│      │           └─ js/
│      │
│      └─ InvoiceBundle/  
│          ├─ Controller/
│          │   └─ InvoiceController.php
│          └─ Resources/
│               └─ views/
│                   └─ Invoice/
│                       ├─ list.html.twig
│                       └─ view.html.twig
│
├─ vendor/
└─ web/  

Teraz je konečne zdôraznené, že bundle je niečo, čo je znovupoužiteľné tak ako to je – bez dodatočných úprav. A že vôbec nie je potreba vytvárať štruktúru s vendor prefixom. V zložke src/ je tak iba jeden AppBundle (situácia väčšiny programátorov) a obsahuje Symfony-špecifický kód pre konkrétnu aplikáciu – controllery, routy, Doctrine entity, formuláre…. Šablóny, preklady a v podstate väčšina obsahu zložky src/AcmeBundle/Resources/ sa presunuly do zložky app/Resources. Takže výsledná štruktúra:

demo/
├─ app/
│  ├─ config/
│  │   └─ services.yml
│  └─ Resources/
│      ├─ views/
│      │   ├─ Product/
│      │   │   ├─ list.html.twig
│      │   │   └─ view.html.twig
│      │   └─ Invoice/
│      │       ├─ list.html.twig
│      │       └─ view.html.twig
│      └─ translations/
│           ├─ messages.sk.yml
│           └─ messages.en.yml
├─ src/
│  └─ AppBundle/
│      └─ Controller/
│          ├─ ProductController.php
│          └─ InvoiceController.php
│
├─ vendor/
└─ web/  
    ├─ css/
    └─ js/

Všetky controllery, šablóny, štýlopisy a javascripty sú spolu a na svojom mieste. Je to prehľadnejšie a ľahšie sa v tom orientuje a udržiava poriadok. Tak som si upratal v zdrojákoch tohoto blogu aj ja :-).

← Späť na zoznam