Skip to content

Commit

Permalink
dirname
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Apr 18, 2024
1 parent 6667abb commit b607f86
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 29 deletions.
14 changes: 7 additions & 7 deletions application/cs/how-it-works.texy
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ Adresářová struktura vypadá nějak takto:
/--pre
<b>web-project/</b>
├── <b>app/</b> ← adresář s aplikací
│ ├── <b>Presenters/</b> ← presentery a šablony
│ │ ── <b>HomePresenter.php</b> ← třída presenteru Home
│ └── <b>templates/</b> ← adresář se šablonami
│ │ ├── <b>@layout.latte</b> ← šablona layoutu
└── <b>Home/</b> ← šablony presenteru Home
── <b>default.latte</b> ← šablona akce 'default'
── <b>Router/</b> ← konfigurace URL adres
│ ├── <b>Core/</b> ← základní třídy nutné pro chod
│ │ ── <b>RouterFactory.php</b> ← konfigurace URL adres
── <b>UI/</b> ← presentery, šablony & spol.
│ │ ├── <b>@layout.latte</b> ← šablona layoutu
│ └── <b>Home/</b> ← adresář presenteru Home
── <b>HomePresenter.php</b> ← třída presenteru Home
│ └── <b>default.latte</b> ← šablona akce 'default'
│ └── <b>Bootstrap.php</b> ← zaváděcí třída Bootstrap
├── <b>bin/</b> ← skripty spouštěné z příkazové řádky
├── <b>config/</b> ← konfigurační soubory
Expand Down
45 changes: 23 additions & 22 deletions application/cs/modules.texy
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,22 @@ Zapomeňme tedy na jednu složku pro presentery a šablony a místo toho vytvoř

/--pre
<b>app/</b>
├── <del>Presenters/</del>
├── <b>Modules/</b> ← adresář s moduly
├── <b>UI/</b> ← presentery, šablony a pomocné třídy
├── <b>@layout.latte</b> ← šablona layoutu
│ ├── <b>Admin/</b> ← modul Admin
│ │ ├── <b>Presenters/</b> ← jeho presentery
│ │ │ ├── <b>DashboardPresenter.php</b>
│ │ │ └── <b>templates/</b>
│ └── <b>Front/</b> ← modul Front
│ └── <b>Presenters/</b> ← jeho presentery
│ │ │ ├── <b>Dashboard/</b>
│ │ │ │ └── <b>DashboardPresenter.php</b>
│ ├── <b>Front/</b> ← modul Front
│ │ ├── <b>Home/</b> ← adresář presenteru Home
│ │ │ ├── <b>HomePresenter.php</b> ← třída presenteru Home
│ │ │ └── <b>default.latte</b> ← šablona akce 'default'
│ └── ...
\--

Tuto adresářovou strukturu budou reflektovat jmenné prostory tříd, takže třeba `DashboardPresenter` bude v prostoru `App\Modules\Admin\Presenters`:
Tuto adresářovou strukturu budou reflektovat jmenné prostory tříd, takže třeba `DashboardPresenter` bude v prostoru `App\UI\Admin`:

```php
namespace App\Modules\Admin\Presenters;
namespace App\UI\Admin\Dashboard;

class DashboardPresenter extends Nette\Application\UI\Presenter
{
Expand All @@ -33,7 +34,7 @@ class DashboardPresenter extends Nette\Application\UI\Presenter
```

Na presenter `Dashboard` uvnitř modulu `Admin` se v rámci aplikace odkazujeme pomocí dvojtečkové notace jako na `Admin:Dashboard`, na jeho akci `default` potom jako na `Admin:Dashboard:default`.
A jak Nette vlastní ví, že `Admin:Dashboard` představuje třídu `App\Modules\Admin\Presenters\DashboardPresenter`? To mu řekneme pomocí [#mapování] v konfiguraci.
A jak Nette vlastní ví, že `Admin:Dashboard` představuje třídu `App\UI\Admin\Dashboard\DashboardPresenter`? To mu řekneme pomocí [#mapování] v konfiguraci.
Tedy uvedená struktura není pevná a můžete si ji upravit podle potřeb.

Moduly mohou kromě presenterů a šablon samozřejmě obsahovat všechny další součásti, jako jsou třeba komponenty, modelové třídy, atd.
Expand All @@ -46,19 +47,19 @@ Moduly nemusí tvořit jen plochou strukturu, lze vytvářet i submoduly, např

/--pre
<b>app/</b>
├── <b>Modules/</b> ← adresář s moduly
├── <b>UI/</b> ← presentery, šablony a pomocné třídy
│ ├── <b>Blog/</b> ← modul Blog
│ │ ├── <b>Admin/</b> ← submodul Admin
│ │ │ ├── <b>Presenters/</b>
│ │ │ ├── <b>Dashboard/</b>
│ │ │ └── ...
│ │ └── <b>Front/</b> ← submodul Front
│ │ ├── <b>Presenters/</b>
│ │ ├── <b>Home/</b>
│ │ └── ...
│ ├── <b>Forum/</b> ← modul Forum
│ │ └── ...
\--

Tedy modul `Blog` je rozdělen do submodulů `Admin` a `Front`. A opět se to odrazí na jmenných prostorech, které budou `App\Modules\Blog\Admin\Presenters` apod. Na presenter `Dashboard` uvnitř submodulu se odkazujeme jako `Blog:Admin:Dashboard`.
Tedy modul `Blog` je rozdělen do submodulů `Admin` a `Front`. A opět se to odrazí na jmenných prostorech, které budou `App\UI\Blog\Admin\...` apod. Na presenter `Dashboard` uvnitř submodulu se odkazujeme jako `Blog:Admin:Dashboard`.

Zanořování může pokračovat libovolně hluboko, lze tedy vytvářet sub-submoduly.

Expand Down Expand Up @@ -104,11 +105,11 @@ Mapování

Definuje pravidla, podle kterých se z názvu presenteru odvodí název třídy. Zapisujeme je v [konfiguraci|configuration] pod klíčem `application › mapping`.

Začněme ukázkou, která moduly nepoužívá. Budeme jen chtít, aby třídy presenterů měly jmenný prostor `App\Presenters`. Tedy aby se presenter například `Home` mapoval na třídu `App\Presenters\HomePresenter`. Toho lze docílit následující konfigurací:
Začněme ukázkou, která moduly nepoužívá. Budeme jen chtít, aby třídy presenterů měly jmenný prostor `App\UI`. Tedy aby se presenter například `Home` mapoval na třídu `App\UI\HomePresenter`. Toho lze docílit následující konfigurací:

```neon
application:
mapping: App\Presenters\*Presenter
mapping: App\UI\*Presenter
```

Název presenteru se nahradí za hvezdičku v masce třídy a výsledkem je název třídy. Snadné!
Expand All @@ -118,30 +119,30 @@ Pokud presentery členíme do modulů, můžeme pro každý modul mít vlastní
```neon
application:
mapping:
Front: App\Modules\Front\Presenters\*Presenter
Admin: App\Modules\Admin\Presenters\*Presenter
Front: App\UI\Front\*Presenter
Admin: App\UI\Admin\*Presenter
Api: App\Api\*Presenter
```

Nyní se presenter `Front:Home` mapuje na třídu `App\Modules\Front\Presenters\HomePresenter` a presenter `Admin:Dashboard` na třídu `App\Modules\Admin\Presenters\DashboardPresenter`.
Nyní se presenter `Front:Home` mapuje na třídu `App\UI\Front\HomePresenter` a presenter `Admin:Dashboard` na třídu `App\UI\Admin\DashboardPresenter`.

Praktičtější bude vytvořit obecné (hvězdičkové) pravidlo, které první dvě nahradí. V masce třídy přibude hvezdička navíc právě pro modul:

```neon
application:
mapping:
*: App\Modules\*\Presenters\*Presenter
*: App\UI\*\*Presenter
Api: App\Api\*Presenter
```

Ale co když používáme vícenásobně zanořené moduly a máme třeba presenter `Admin:User:Edit`? V takovém případě se segment s hvězdičkou představující modul pro každou úroveň jednoduše zopakuje a výsledkem bude třída `App\Modules\Admin\User\Presenters\EditPresenter`.
Ale co když používáme vícenásobně zanořené moduly a máme třeba presenter `Admin:User:Edit`? V takovém případě se segment s hvězdičkou představující modul pro každou úroveň jednoduše zopakuje a výsledkem bude třída `App\UI\Admin\User\EditPresenter`.

Alternativním zápisem je místo řetězce použít pole skládající se ze tří segmentů. Tento zápis je ekvivaletní s předchozím:

```neon
application:
mapping:
*: [App\Modules, *, Presenters\*Presenter]
*: [App\UI, *, *Presenter]
```

Výchozí hodnotou je `*Module\*Presenter`.

0 comments on commit b607f86

Please sign in to comment.