Skip to content

Commit cab1c2e

Browse files
committed
delete
1 parent 52ddd25 commit cab1c2e

16 files changed

+16
-2928
lines changed

application/bg/modules.texy

+1-183
Original file line numberDiff line numberDiff line change
@@ -1,183 +1 @@
1-
Модули
2-
******
3-
4-
.[perex]
5-
Модулите внасят яснота в приложенията на Nette, като улесняват лесното им разделяне на логически единици.
6-
7-
Подобно на организирането на файловете в папки на твърдия диск, в Nette можем да разделим презентатори, шаблони и други спомагателни класове на модули. Как работи това на практика? Просто чрез включване на нови поддиректории в структурата. Ето един пример за структура с два модула - Front и Admin:
8-
9-
/--pre
10-
app/
11-
├── UI/
12-
│ ├── <b>Admin/</b> ← Admin module
13-
│ │ ├── @layout.latte
14-
│ │ ├── Dashboard/
15-
│ │ │ ├── DashboardPresenter.php
16-
│ │ │ └── default.latte
17-
│ │ └── ...
18-
│ ├── <b>Front/</b> ← Front module
19-
│ │ ├── @layout.latte
20-
│ │ ├── Home/
21-
│ │ │ ├── HomePresenter.php
22-
│ │ │ └── default.latte
23-
│ │ └── ...
24-
\--
25-
26-
Тази структура на директориите е отразена в пространствата от имена на класовете, така че например `DashboardPresenter` се намира в пространството от имена `App\UI\Admin\Dashboard`:
27-
28-
```php
29-
namespace App\UI\Admin\Dashboard;
30-
31-
class DashboardPresenter extends Nette\Application\UI\Presenter
32-
{
33-
// ...
34-
}
35-
```
36-
37-
В приложението се позоваваме на презентатора `Dashboard` в рамките на модула `Admin`, като използваме запис с двоеточие като `Admin:Dashboard`. За неговото действие `default` го наричаме `Admin:Dashboard:default`.
38-
39-
Представената структура не е твърда; в конфигурацията можете [напълно |#mapping] да [я адаптирате към вашите нужди |#mapping]. .[tip]
40-
41-
Модулите могат да включват всички други файлове, като компоненти и спомагателни класове, в допълнение към презентаторите и шаблоните. Ако обмисляте къде да ги поставите, помислете за използването на папка `Accessory`:
42-
43-
/--pre
44-
app/
45-
├── UI/
46-
│ ├── Admin/
47-
│ │ ├── <b>Accessory/</b>
48-
│ │ │ ├── FormFactory.php
49-
│ │ │ └── AdminLayout.php
50-
│ │ ├── Dashboard/
51-
│ │ └── ...
52-
\--
53-
54-
55-
Вложени модули .[#toc-nested-modules]
56-
-------------------------------------
57-
58-
Модулите могат да имат няколко нива на влагане, подобно на структурата на директориите на диска:
59-
60-
/--pre
61-
app/
62-
├── UI/
63-
│ ├── <b>Blog/</b> ← Blog module
64-
│ │ ├── <b>Admin/</b> ← Admin submodule
65-
│ │ │ ├── Dashboard/
66-
│ │ │ └── ...
67-
│ │ ├── <b>Front/</b> ← Front submodule
68-
│ │ │ ├── @layout.latte
69-
│ │ │ ├── Home/
70-
│ │ │ └── ...
71-
│ ├── <b>Forum/</b> ← Forum module
72-
│ │ └── ...
73-
\--
74-
75-
Модулът `Blog` е разделен на подмодули `Admin` и `Front`. Това е отразено и в пространствата от имена, които след това се появяват като `App\UI\Blog\Admin` и по подобен начин. За да се позовем на презентатора `Dashboard` в рамките на подмодула `Admin`, го наричаме `Blog:Admin:Dashboard`.
76-
77-
Влагането може да бъде толкова дълбоко, колкото е необходимо, като позволява създаването на подмодули.
78-
79-
Например, ако в администрацията имате много презентатори, свързани с управлението на поръчки, като `OrderDetail`, `OrderEdit`, `OrderDispatch` и т.н., може да създадете модул `Order`, в който ще бъдат организирани презентатори като `Detail`, `Edit`, `Dispatch` и други.
80-
81-
82-
Създаване на връзки .[#toc-creating-links]
83-
------------------------------------------
84-
85-
Връзките в главните шаблони са относителни към текущия модул. По този начин връзка `Foo:default` води до главния `Foo` в същия модул като текущия главен. Например, ако текущият модул е `Front`, връзката изглежда по следния начин
86-
87-
```latte
88-
<a n:href="Product:show">odkaz na Front:Product:show</a>
89-
```
90-
91-
Връзката е относителна, дори ако името на модула е част от нея, тогава той се счита за подмодул:
92-
93-
```latte
94-
<a n:href="Shop:Product:show">odkaz na Front:Shop:Product:show</a>
95-
```
96-
97-
Абсолютните връзки се записват подобно на абсолютните пътища на диска, но с двоеточие вместо с наклонена черта. Така абсолютната връзка започва с двоеточие:
98-
99-
```latte
100-
<a n:href=":Admin:Product:show">odkaz na Admin:Product:show</a>
101-
```
102-
103-
За да разберем дали се намираме в определен модул или подмодул, използваме функцията `isModuleCurrent(moduleName)`.
104-
105-
```latte
106-
<li n:class="isModuleCurrent('Forum:Users') ? active">
107-
<a n:href="Product:">...</a>
108-
</li>
109-
```
110-
111-
112-
Маршрутизиране .[#toc-routing]
113-
------------------------------
114-
115-
Вижте [главата за маршрутизиране |routing#modules].
116-
117-
118-
Картографиране .[#toc-mapping]
119-
------------------------------
120-
121-
Съпоставянето определя правилата за извеждане на името на класа от името на водещия. Тези правила се посочват в [конфигурацията |configuration] под ключа `application › mapping`.
122-
123-
Структурите на директориите, споменати по-рано на тази страница, се основават на следното съпоставяне:
124-
125-
```neon
126-
application:
127-
mapping: App\UI\*\**Presenter
128-
```
129-
130-
Как работи картографирането? За по-добро разбиране нека първо си представим приложение без модули. Искаме класовете на презентаторите да попадат в пространството от имена `App\UI`, така че презентаторът `Home` да се съпостави с класа `App\UI\HomePresenter`. Това може да се постигне с тази конфигурация:
131-
132-
```neon
133-
application:
134-
mapping: App\UI\*Presenter
135-
```
136-
137-
Това съпоставяне се извършва чрез замяна на звездичката в маската `App\UI\*Presenter` с името на презентатора `Home`, в резултат на което се получава крайното име на класа `App\UI\HomePresenter`. Просто!
138-
139-
Въпреки това, както можете да видите в примерите в тази и други глави, ние поставяме класовете на водещите в едноименни поддиректории, например водещият `Home` е картографиран към клас `App\UI\Home\HomePresenter`. Това се постига чрез удвояване на звездичката (изисква Nette Application 3.2):
140-
141-
```neon
142-
application:
143-
mapping: App\UI\**Presenter
144-
```
145-
146-
Сега нека преминем към картографиране на презентатори в модули. Можем да дефинираме специфични съпоставки за всеки модул:
147-
148-
```neon
149-
application:
150-
mapping:
151-
Front: App\UI\Front\**Presenter
152-
Admin: App\UI\Admin\**Presenter
153-
Api: App\Api\*Presenter
154-
```
155-
156-
Според тази конфигурация презентаторът `Front:Home` се съотнася към класа `App\UI\Front\Home\HomePresenter`, а презентаторът `Api:OAuth` се съотнася към класа `App\Api\OAuthPresenter`.
157-
158-
Тъй като модулите `Front` и `Admin` имат сходен подход на картографиране и вероятно има повече такива модули, е възможно да се създаде общо правило, което да ги замени. Към маската на класа се добавя нова звездичка за модула:
159-
160-
```neon
161-
application:
162-
mapping:
163-
*: App\UI\*\**Presenter
164-
Api: App\Api\*Presenter
165-
```
166-
167-
За вложени модули на няколко нива, като например водещия `Admin:User:Edit`, сегментът със звездичка се повтаря за всяко ниво, в резултат на което се получава клас `App\UI\Admin\User\Edit\EditPresenter`.
168-
169-
Алтернативен запис е да се използва масив, съставен от три сегмента, вместо низ. Този запис е еквивалентен на предишния:
170-
171-
```neon
172-
application:
173-
mapping:
174-
*: [App\UI, *, **Presenter]
175-
Api: [App\Api, '', *Presenter]
176-
```
177-
178-
Ако имаме само едно правило в конфигурацията, общото, можем да го напишем накратко:
179-
180-
```neon
181-
application:
182-
mapping: App\UI\*\**Presenter
183-
```
1+
{{redirect:directory-structure}}

application/cs/modules.texy

+1-183
Original file line numberDiff line numberDiff line change
@@ -1,183 +1 @@
1-
Moduly
2-
******
3-
4-
.[perex]
5-
Moduly vnášejí do Nette aplikací přehlednost díky snadnému členění do logických celků.
6-
7-
Podobně jako na pevném disku organizujeme soubory do jednotlivých složek, tak i v Nette můžeme presentery, šablony a další pomocné třídy rozdělovat do modulů. Jak to funguje v praxi? Jednoduše začleníme do struktury nové podadresáře. Příklad takové struktury se dvěma moduly Front a Admin:
8-
9-
/--pre
10-
app/
11-
├── UI/
12-
│ ├── <b>Admin/</b> ← modul Admin
13-
│ │ ├── @layout.latte
14-
│ │ ├── Dashboard/
15-
│ │ │ ├── DashboardPresenter.php
16-
│ │ │ └── default.latte
17-
│ │ └── ...
18-
│ ├── <b>Front/</b> ← modul Front
19-
│ │ ├── @layout.latte
20-
│ │ ├── Home/
21-
│ │ │ ├── HomePresenter.php
22-
│ │ │ └── default.latte
23-
│ │ └── ...
24-
\--
25-
26-
Tato adresářová struktura se odráží ve jmenných prostorech tříd, takže například `DashboardPresenter` se nachází ve jmenném prostoru `App\UI\Admin\Dashboard`:
27-
28-
```php
29-
namespace App\UI\Admin\Dashboard;
30-
31-
class DashboardPresenter extends Nette\Application\UI\Presenter
32-
{
33-
// ...
34-
}
35-
```
36-
37-
Na presenter `Dashboard` uvnitř modulu `Admin` odkazujeme v aplikaci pomocí dvojtečkové notace jako na `Admin:Dashboard`. Na jeho akci `default` potom jako na `Admin:Dashboard:default`.
38-
39-
Představená struktura není pevná; můžete si ji zcela [přizpůsobit dle svých potřeb|#mapování] v konfiguraci. .[tip]
40-
41-
Moduly mohou kromě presenterů a šablon samozřejmě zahrnovat všechny ostatní soubory, jako jsou například komponenty a pomocné třídy. Pokud uvažujete, kam je zařadit, zvažte využití složky `Accessory`:
42-
43-
/--pre
44-
app/
45-
├── UI/
46-
│ ├── Admin/
47-
│ │ ├── <b>Accessory/</b>
48-
│ │ │ ├── FormFactory.php
49-
│ │ │ └── AdminLayout.php
50-
│ │ ├── Dashboard/
51-
│ │ └── ...
52-
\--
53-
54-
55-
Vnořené moduly
56-
--------------
57-
58-
Moduly mohou mít více úrovní zanoření, podobně jako adresářová struktura na disku:
59-
60-
/--pre
61-
app/
62-
├── UI/
63-
│ ├── <b>Blog/</b> ← modul Blog
64-
│ │ ├── <b>Admin/</b> ← submodul Admin
65-
│ │ │ ├── Dashboard/
66-
│ │ │ └── ...
67-
│ │ ├── <b>Front/</b> ← submodul Front
68-
│ │ │ ├── @layout.latte
69-
│ │ │ ├── Home/
70-
│ │ │ └── ...
71-
│ ├── <b>Forum/</b> ← modul Forum
72-
│ │ └── ...
73-
\--
74-
75-
Modul `Blog` je rozdělen na submoduly `Admin` a `Front`. To se projeví i ve jmenných prostorech, které pak budou vypadat jako `App\UI\Blog\Admin` a podobně. Na presenter `Dashboard` v rámci submodulu odkazujeme jako na `Blog:Admin:Dashboard`.
76-
77-
Zanoření může být libovolně hluboké, což umožňuje vytvářet sub-submoduly.
78-
79-
Pokud například v administraci máte mnoho presenterů týkajících se správy objednávek, jako jsou `OrderDetail`, `OrderEdit`, `OrderDispatch` atd., můžete pro lepší organizovanost vytvořit modul `Order`, ve kterém budou presentery `Detail`, `Edit`, `Dispatch` a další.
80-
81-
82-
Vytváření odkazů
83-
----------------
84-
85-
Odkazy v šablonách presenterů jsou relativní vůči aktuálnímu modulu. Tedy odkaz `Foo:default` vede na presenter `Foo` v tomtéž modulu, v jakém je aktuální presenter. Pokud je aktuální modul například `Front`, pak odkaz vede takto:
86-
87-
```latte
88-
<a n:href="Product:show">odkaz na Front:Product:show</a>
89-
```
90-
91-
Odkaz je relativní i pokud je jeho součástí název modulu, ten se pak považuje za submodul:
92-
93-
```latte
94-
<a n:href="Shop:Product:show">odkaz na Front:Shop:Product:show</a>
95-
```
96-
97-
Absolutní odkazy zapisujeme analogicky k absolutním cestám na disku, jen místo lomítek jsou dvojtečky. Tedy absolutní odkaz začíná dvojtečkou:
98-
99-
```latte
100-
<a n:href=":Admin:Product:show">odkaz na Admin:Product:show</a>
101-
```
102-
103-
Pro zjištění, zda jsme v určitém modulu nebo jeho submodulu, použijeme funkci `isModuleCurrent(moduleName)`.
104-
105-
```latte
106-
<li n:class="isModuleCurrent('Forum:Users') ? active">
107-
<a n:href="Product:">...</a>
108-
</li>
109-
```
110-
111-
112-
Routování
113-
---------
114-
115-
Viz [kapitola o routování |routing#Moduly].
116-
117-
118-
Mapování
119-
--------
120-
121-
Mapování definuje pravidla pro odvozování názvu třídy z názvu presenteru. Specifikujeme je v [konfiguraci|configuration] pod klíčem `application › mapping`.
122-
123-
Adresářové struktury uváděné výše na této stránce vycházejí z tohoto mapování:
124-
125-
```neon
126-
application:
127-
mapping: App\UI\*\**Presenter
128-
```
129-
130-
Jak mapování funguje? Pro lepší pochopení si nejprve představme aplikaci bez modulů. Chceme, aby třídy presenterů spadaly do jmenného prostoru `App\UI`, aby se presenter `Home` mapoval na třídu `App\UI\HomePresenter`. Což dosáhneme touto konfigurací:
131-
132-
```neon
133-
application:
134-
mapping: App\UI\*Presenter
135-
```
136-
137-
Mapování funguje tak, že název presenteru `Home` nahradí hvězdičku v masce `App\UI\*Presenter`, čímž získáme výsledný název třídy `App\UI\HomePresenter`. Jednoduché!
138-
139-
Jak ale vidíte v ukázkách v této a dalších kapitolách, třídy presenterů umisťujeme do eponymních podadresářů, například presenter `Home` se mapuje na třídu `App\UI\Home\HomePresenter`. Toho dosáhneme zdvojením dvojtečky (vyžaduje Nette Application 3.2):
140-
141-
```neon
142-
application:
143-
mapping: App\UI\**Presenter
144-
```
145-
146-
Nyní přistoupíme k mapování presenterů do modulů. Pro každý modul můžeme definovat specifické mapování:
147-
148-
```neon
149-
application:
150-
mapping:
151-
Front: App\UI\Front\**Presenter
152-
Admin: App\UI\Admin\**Presenter
153-
Api: App\Api\*Presenter
154-
```
155-
156-
Podle této konfigurace se presenter `Front:Home` mapuje na třídu `App\UI\Front\Home\HomePresenter`, zatímco presenter `Api:OAuth` na třídu `App\Api\OAuthPresenter`.
157-
158-
Protože moduly `Front` i `Admin` mají podobný způsob mapování a takových modulů bude nejspíš více, je možné vytvořit obecné pravidlo, které je nahradí. Do masky třídy tak přibude nová hvězdička pro modul:
159-
160-
```neon
161-
application:
162-
mapping:
163-
*: App\UI\*\**Presenter
164-
Api: App\Api\*Presenter
165-
```
166-
167-
Pro vícenásobně zanořené moduly, jako je například presenter `Admin:User:Edit`, se segment s hvězdičkou opakuje pro každou úroveň a výsledkem je třída `App\UI\Admin\User\Edit\EditPresenter`.
168-
169-
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:
170-
171-
```neon
172-
application:
173-
mapping:
174-
*: [App\UI, *, **Presenter]
175-
Api: [App\Api, '', *Presenter]
176-
```
177-
178-
Pokud bychom měli v konfiguraci jen jediné pravidlo, ono obecné, můžeme zkráceně zapsat:
179-
180-
```neon
181-
application:
182-
mapping: App\UI\*\**Presenter
183-
```
1+
{{redirect:directory-structure}}

0 commit comments

Comments
 (0)