Elegantnější strukturování presenterů
Máte rádi pořádek a strukturu? Když je všechno přesně tam, kde má být, a snadno se v tom orientujete? Kdo by neměl. Nette Framework 3.2 přináší nový způsob, jak organizovat presentery a jejich šablony ve vaší aplikaci.
![](https://files.nette.org/blog/main/499-b.jpg?v=1713481170)
Nette nyní umožňuje každému presenteru mít svůj vlastní samostatný adresář. To znamená, že všechny soubory týkající se konkrétního presenteru, od PHP souborů až po šablony Latte, můžete mít pohromadě v jedné složce. To usnadňuje navigaci ve vašem projektu a zvyšuje přehlednost.
Představte si tuto strukturu:
├── @layout.latte
├── Home/
│ ├── HomePresenter.php
│ ├── HomeTemplate.php
│ └── default.latte
├── Article/
│ ├── ArticlePresenter.php
│ ├── ArticleTemplate.php
│ ├── add.latte
│ └── edit.latte
Každý presenter má svou složku a v ní vše potřebné. Už žádné zdlouhavé dohledávání šablon v podadresářích.
Jak to funguje?
Díky novému zástupnému znaku **
v mapování můžete
definovat, že presenter má být v eponymní složce:
application:
mapping: App\UI\*\**Presenter
Toto nastavení zajistí, že například presenter
Admin:Dashboard
se bude mapovat na třídu
App\UI\Admin\Dashboard\DashboardPresenter
.
A co šablony?
Pokud chcete nadále umísťovat šablony do samostatné složky jako dosud,
nemusíte se ničeho obávat. Nette nyní inteligentně hledá šablony jak ve
složce templates
, tak ve složce s presenterem, a to pokud
adresář templates
neexistuje.
Podobně to funguje s @layout.latte
. Pokud adresář
templates
neexistuje, hledá se nejprve ve složce presenteru a
poté ve složkách nadřazených. A to až podle úrovně zanoření
modulu.
Jak začít používat tuto novinku?
Stačí jen upravit mapování a přesunout soubory. V PhpStormu nad názvem třídy stisknete F6 a můžete změnit namespace. Soubory se šablonami je potřeba přesunout ručně.
Tato adresářová struktura se používá také ve skeletonu
nette/web-project
. Složkou, která obsahuje všechny presentery,
jejich šablony a případné pomocné třídy, je App\UI
. Není to
obvyklé Module
, protože takový název není příliš
vypovídající a zároveň je hodně podobný používanému
Model
. Pokud uvažujete, kam zařadit různé další pomocné
třídy, zvažte využití složky Accessory
:
app/ ├── UI/ │ ├── Accessory/ │ │ ├── FormFactory.php │ │ └── AdminLayout.php │ ├── Dashboard/ │ │ ├── DashboardPresenter.php │ │ └── default.latte │ └── ...
Tato metoda nejen zjednodušuje organizaci souborů, ale také je v souladu s moderními postupy kódování, protože činí strukturu aplikace modulárnější a snadněji udržovatelnou.
Komentáře (RSS)
Tak tohle se mi brutalne libi! Okamzite jsem to na aktualnim projektu poprehazel a ted je to uz uplne o necem jinem! Ted je to prehledne! Skvele! Diky!!
Je to pěkné. Jen mě trochu dráždí, když už jsem se do toho úklidu dal, že se Accessory míchá s ostatními složkami + neměl jsem kam dát soubory s šablonami, které vkládám do hl. @layout.latte (je jich hodně na to je nechat ležet vedle). Prozatím jsem to vyřešil tím, že mám UI/_accessory a UI/_templates, ale něco mi říká, že úplně 100% to není. Nějaké nápady?
Tohle je super! 👏 Používám tuto „feature“ based strukturu v projektech a je to prostě efektivní.
A pro single action prezenter takto?
app/
├── UI/
│ ├── Article/
│ │ ├── ShowPresenter.php
│ │ ├── AddPresenter.php
│ │ ├── EditPresenter.php
│ │ ├── templates/
│ │ │ ├── Show/
│ │ │ │ └── default.latte
│ │ │ ├── Add/
│ │ │ │ └── default.latte
│ │ │ └── Edit/
│ │ │ └── default.latte
│ ├── Accessory/
│ │ ├── FormFactory.php
│ │ └── SomeHelperClass.php
├── Model/
│ ├── Article.php
│ └── ArticleRepository.php
config/
├── common.neon
├── local.neon
Chcete-li odeslat komentář, přihlaste se