Skip to content

Commit

Permalink
nette/application 3.2.2: new directory structure
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Apr 19, 2024
1 parent e150936 commit 79c698c
Show file tree
Hide file tree
Showing 48 changed files with 2,523 additions and 1,259 deletions.
25 changes: 11 additions & 14 deletions application/bg/how-it-works.texy
Expand Up @@ -22,13 +22,13 @@
/--pre
<b>web-project/</b>
├── <b>app/</b> ← каталог с приложением
│ ├── <b>Presenters/</b> ← классы презентеров
│ │ ── <b>HomePresenter.php</b> ← Класс презентера главной страницы
│ └── <b>templates/</b> ← директория шаблонов
│ │ ├── <b>@layout.latte</b> ← шаблон общего макета
│ │ └── <b>Home/</b> ← шаблоны презентера главной страницы
│ │ ── <b>default.latte</b> ← шаблон действия `default`
── <b>Router/</b> ← конфигурация URL-адресов
│ ├── <b>Основни/</b> ← основни необходими класове
│ │ ── <b>RouterFactory.php</b> ← конфигуриране на URL адреси
── <b>UI/</b> ← презентатори, шаблони и др.
│ │ ├── <b>@layout.latte</b> ← шаблон на споделено оформление
│ │ └── <b>Home/</b> ← Директория за водещи
│ │ ── <b>HomePresenter.php</b> ← Клас на Home Presenter
│ └── <b>default.latte</b> ← шаблон за действие default
│ └── <b>Bootstrap.php</b> ← загрузочный класс Bootstrap
├── <b>bin/</b> ← скрипты командной строки
├── <b>config/</b> ← файлы конфигурации
Expand Down Expand Up @@ -91,7 +91,7 @@ Nette е наставник, който ви напътства да пишет

Приложението започва с искане към т.нар. маршрутизатор да реши на кой от презентаторите да изпрати текущата заявка за обработка. Маршрутизаторът решава чия е отговорността. Той разглежда входния URL адрес `https://example.com/product/123`, който иска продукт `показать` с `id: 123` като действие. Добър навик е да записвате двойките водещ + действие, разделени с двоеточие: `Продукт:показать`.

Следователно маршрутизаторът е преобразувал URL адреса в двойка `Presenter:action` + параметри, в нашия случай `Product:show` + `id`: 123`. Вы можете увидеть, как выглядит маршрутизатор в файле `app/Router/RouterFactory.php`, и ще го опишем подробно в главата [Маршрутизация |routing].
Следователно маршрутизаторът е преобразувал URL адреса в двойка `Presenter:action` + параметри, в нашия случай `Product:show` + `id`: 123`. Вы можете увидеть, как выглядит маршрутизатор в файле `app/Core/RouterFactory.php`, и ще го опишем подробно в главата [Маршрутизация |routing].

Да продължим. Приложението вече знае името на водещия и може да продължи. Чрез създаване на обект `ProductPresenter`, който е кодът на предентера `Product`. По-точно, той иска от контейнера DI да създаде презентатора, тъй като създаването на обекти е негова работа.

Expand Down Expand Up @@ -121,12 +121,9 @@ class ProductPresenter extends Nette\Application\UI\Presenter

След това водещият връща отговор. Това може да бъде HTML страница, изображение, XML документ, файл, изпратен от диска, JSON или пренасочване към друга страница. Важно е да се отбележи, че ако не посочим изрично как да се отговори (какъвто е случаят с `ProductPresenter`), отговорът ще бъде шаблон, показващ HTML страница. Защо? Ами защото в 99% от случаите искаме да покажем шаблон, водещият приема това поведение по подразбиране и иска да улесни работата ни. Това е гледната точка на Нете.

Дори не е необходимо да указваме кой шаблон да се покаже, той сам извежда пътя до него според проста логика. В случая с водещия `Product` и действието `show`, той се опитва да провери дали някой от тези файлове с шаблони съществува спрямо директорията, в която се намира класът `ProductPresenter`:
Дори не е необходимо да посочваме кой шаблон да се визуализира; рамката сама ще определи пътя. В случая с действието `show` тя просто се опитва да зареди шаблона `show.latte` в директорията с класа `ProductPresenter`. Тя също така се опитва да намери оформлението във файла `@layout.latte` (повече за [търсенето на шаблони |templates#Template Lookup]).

- `templates/Product/show.latte`
- `templates/Product.show.latte`

След това се показва шаблонът. Задачата на водещия и на цялото приложение вече е изпълнена. Ако шаблонът не съществува, ще бъде върната страница за грешка 404. Можете да прочетете повече за водещите на страницата [Водещи |presenters].
Впоследствие шаблоните се визуализират. С това задачата на презентатора и на цялото приложение е изпълнена и работата е приключила. Ако шаблонът не съществува, ще бъде върната страница с грешка 404. Можете да прочетете повече за презентаторите на страницата [Презентатори |presenters].

[* request-flow.svg *]

Expand All @@ -137,7 +134,7 @@ class ProductPresenter extends Nette\Application\UI\Presenter
3) маршрутизаторът декодира URL адреса като двойка `Home:default`
4) обектът е създаден `HomePresenter`
5) извиква се методът `renderDefault()` (ако съществува)
6) шаблонът `templates/Home/default.latte` с оформлението `templates/@layout.latte` се визуализира
6) шаблонът `default.latte` с оформлението `@layout.latte` се визуализира


Може би сега ще се сблъскате с много нови концепции, но ние смятаме, че те имат смисъл. Създаването на приложения в Nette е лесно.
Expand Down

0 comments on commit 79c698c

Please sign in to comment.