Skip to content

Commit

Permalink
modules => directory structure
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Jan 23, 2025
1 parent cab1c2e commit 813c74b
Show file tree
Hide file tree
Showing 20 changed files with 50 additions and 36 deletions.
2 changes: 1 addition & 1 deletion application/cs/@left-menu.texy
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Aplikace v Nette
- [Bootstrap]
- [Presentery |presenters]
- [Šablony |templates]
- [Moduly |modules]
- [Adresářová struktura |directory-structure]
- [Routování |routing]
- [Vytváření odkazů URL |creating-links]
- [Interaktivní komponenty |components]
Expand Down
2 changes: 1 addition & 1 deletion application/cs/bootstrap.texy
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class Bootstrap
index.php
=========

Prvotní soubor je v případě webových aplikací `index.php`, který se nachází ve veřejném adresáři `www/`. Ten si nechá od třídy Bootstrap inicializovat prostředí a vyrobit DI kontejner. Poté z něj získá službu `Application`, která spustí webovou aplikaci:
Prvotní soubor je v případě webových aplikací `index.php`, který se nachází ve [veřejném adresáři |directory-structure#verejny-adresar-www] `www/`. Ten si nechá od třídy Bootstrap inicializovat prostředí a vyrobit DI kontejner. Poté z něj získá službu `Application`, která spustí webovou aplikaci:

```php
$bootstrap = new App\Bootstrap;
Expand Down
2 changes: 1 addition & 1 deletion application/cs/configuration.texy
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Volba `silentLinks` určuje, jak se Nette zachová ve vývojářském režimu, k

[Aliasy zjednodušují odkazování |creating-links#aliasy] na často používané presentery.

[Mapování definuje pravidla |modules#mapování], podle kterých se z názvu presenteru odvodí název třídy.
[Mapování definuje pravidla |directory-structure#mapování presenterů], podle kterých se z názvu presenteru odvodí název třídy.


Automatická registrace presenterů
Expand Down
4 changes: 2 additions & 2 deletions application/cs/creating-links.texy
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ Pokud je cílem akce `default`, můžeme ji vynechat, ale dvojtečka musí zůst
<a n:href="Home:">úvodní stránka</a>
```

Odkazy mohou také směřovat do jiných [modulů |modules]. Zde se odkazy rozlišují na relativní do zanořeného submodulu, nebo absolutní. Princip je analogický k cestám na disku, jen místo lomítek jsou dvojtečky. Předpokládejme, že aktuální presenter je součástí modulu `Front`, potom zapíšeme:
Odkazy mohou také směřovat do jiných [modulů |directory-structure#Presentery a šablony]. Zde se odkazy rozlišují na relativní do zanořeného submodulu, nebo absolutní. Princip je analogický k cestám na disku, jen místo lomítek jsou dvojtečky. Předpokládejme, že aktuální presenter je součástí modulu `Front`, potom zapíšeme:

```latte
<a n:href="Shop:Product:show">odkaz na Front:Shop:Product:show</a>
Expand Down Expand Up @@ -281,6 +281,6 @@ Jak vytvářet odkazy s podobným komfortem jako má metoda `link()`, ale bez p

LinkGenerátor je služba, kterou si můžete nechat předat přes konstruktor a poté vytvářet odkazy jeho metodou `link()`.

Oproti presenterům je tu rozdíl. LinkGenerator vytváří všechny odkazy rovnou jako absolutní URL. A dále neexistuje žádný "aktuální presenter", takže nelze jako cíl uvést jen název akce `link('default')` nebo uvádět relativní cesty k [modulům |modules].
Oproti presenterům je tu rozdíl. LinkGenerator vytváří všechny odkazy rovnou jako absolutní URL. A dále neexistuje žádný "aktuální presenter", takže nelze jako cíl uvést jen název akce `link('default')` nebo uvádět relativní cesty k modulům.

Neplatné odkazy vždy vyhazují `Nette\Application\UI\InvalidLinkException`.
6 changes: 3 additions & 3 deletions application/cs/how-it-works.texy
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ Adresářová struktura vypadá nějak takto:
└── <b>.htaccess</b> ← zakazuje přístup do všech adresářů krom www
\--

Adresářovou strukturu můžete jakkoliv měnit, složky přejmenovat či přesunout, a poté pouze upravit cesty k `log/` a `temp/` v souboru `Bootstrap.php` a dále cestu k tomuto souboru v `composer.json` v sekci `autoload`. Nic víc, žádná složitá rekonfigurace, žádné změny konstant. Nette totiž disponuje [chytrou autodetekcí|bootstrap#vyvojarsky-vs-produkcni-rezim].
Adresářovou strukturu můžete jakkoliv měnit, složky přejmenovat či přesunout, je zcela flexibilní. Nette navíc disponuje chytrou autodetekcí a automaticky rozpozná umístění aplikace včetně její URL základny.

U trošku větších aplikací můžeme složky s presentery a šablonami rozčlenit na disku do podadresářů a třídy do jmenných prostorů, kterým říkáme [moduly |modules].
U trošku větších aplikací můžeme složky s presentery a šablonami [rozčlenit do podadresářů |directory-structure#Presentery a šablony] a třídy do jmenných prostorů, kterým říkáme moduly.

Adresář `www/` představuje tzv. veřejný adresář neboli document-root projektu. Můžete jej přejmenovat bez nutnosti cokoliv dalšího nastavovat na straně aplikace. Jen je potřeba [nakonfigurovat hosting |nette:troubleshooting#Jak změnit či ostranit z URL adresář www] tak, aby document-root mířil do tohoto adresáře.

Expand Down Expand Up @@ -75,7 +75,7 @@ Jeho úkolem je:

Jakou že továrnu? Nevyrábíme přece traktory, ale webové stránky! Vydržte, hned se to vysvětlí.

Slovy „inicializace prostředí“ myslíme například to, že se aktivuje [Tracy|tracy:], což je úžasný nástroj pro logování nebo vizualizaci chyb. Na produkčním serveru chyby loguje, na vývojovém rovnou zobrazuje. Tudíž k inicializaci patří i rozhodnutí, zda web běží v produkčním nebo vývojářském režimu. K tomu Nette používá autodetekci: pokud web spouštíte na localhost, běží v režimu vývojářském. Nemusíte tak nic konfigurovat a aplikace je rovnou připravena jak pro vývoj, tak ostré nasazení. Tyhle kroky se provádějí a jsou podrobně rozepsané v kapitole o [třídě Bootstrap|bootstrap].
Slovy „inicializace prostředí“ myslíme například to, že se aktivuje [Tracy|tracy:], což je úžasný nástroj pro logování nebo vizualizaci chyb. Na produkčním serveru chyby loguje, na vývojovém rovnou zobrazuje. Tudíž k inicializaci patří i rozhodnutí, zda web běží v produkčním nebo vývojářském režimu. K tomu Nette používá [chytrou autodetekci|bootstrap#vyvojarsky-vs-produkcni-rezim]: pokud web spouštíte na localhost, běží v režimu vývojářském. Nemusíte tak nic konfigurovat a aplikace je rovnou připravena jak pro vývoj, tak ostré nasazení. Tyhle kroky se provádějí a jsou podrobně rozepsané v kapitole o [třídě Bootstrap|bootstrap].

Třetím bodem (ano, druhý jsme přeskočili, ale vrátíme se k němu) je spuštění aplikace. Vyřizování HTTP požadavků má v Nette na starosti třída `Nette\Application\Application` (dále `Application`), takže když říkáme spustit aplikaci, myslíme tím konkrétně zavolání metody s příznačným názvem `run()` na objektu této třídy.

Expand Down
2 changes: 1 addition & 1 deletion application/cs/routing.texy
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ $router->addRoute('<lang cs|en>', function (string $lang) {
Moduly
------

Pokud máme více rout, které spadají do společného [modulu |modules], využijeme `withModule()`:
Pokud máme více rout, které spadají do společného [modulu |directory-structure#Presentery a šablony], využijeme `withModule()`:

```php
$router = new RouteList;
Expand Down
2 changes: 1 addition & 1 deletion application/cs/templates.texy
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ app/
└── <b>@layout.latte</b> ← jen pro Home, 2. varianta
\--

Pokud se presenter nachází v [modulu|modules], bude se dohledávat i o další adresářové úrovně výš, podle zanoření modulu.
Pokud se presenter nachází v modulu, bude se dohledávat i o další adresářové úrovně výš, podle zanoření modulu.

Název layoutu lze změnit pomocí `$this->setLayout('layoutAdmin')` a pak se bude očekávat v souboru `@layoutAdmin.latte`. Také lze přímo určit soubor se šablonou layoutu pomocí `$this->setLayout('/path/to/template.latte')`.

Expand Down
2 changes: 1 addition & 1 deletion application/en/@left-menu.texy
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Nette Application
- [Bootstrap]
- [Presenters]
- [Templates]
- [Modules]
- [Directory structure |directory-structure]
- [Routing]
- [Creating URL Links |creating-links]
- [Interactive Components |components]
Expand Down
2 changes: 1 addition & 1 deletion application/en/bootstrap.texy
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class Bootstrap
index.php
=========

The initial file for web applications is `index.php`, located in the public directory `www/`. It uses the `Bootstrap` class to initialize the environment and create a DI container. Then, it obtains the `Application` service from the container, which launches the web application:
In the case of web applications, the primary file is `index.php`, which is located in the [public directory |directory-structure#public-directory-www] `www/`. This will have the Bootstrap class initialize the environment and produce a DI container. It then gets the `Application` service from it, which starts the web application:

```php
$bootstrap = new App\Bootstrap;
Expand Down
2 changes: 1 addition & 1 deletion application/en/configuration.texy
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Option `silentLinks` determines how Nette behaves in developer mode when link ge

[Aliases simplify referencing |creating-links#aliases] frequently used presenters.

The [mapping defines the rules |modules#mapping] by which the class name is derived from the presenter name.
The [mapping defines the rules |directory-structure#Presenter Mapping] by which the class name is derived from the presenter name.


Automatic Registration of Presenters
Expand Down
4 changes: 2 additions & 2 deletions application/en/creating-links.texy
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ If the action is `default`, we can omit it, but the colon must remain:
<a n:href="Home:">home</a>
```

Links may also point to other [modules]. Here, the links are distinguished into relative to the submodules, or absolute. The principle is analogous to disk paths, only instead of slashes there are colons. Let's assume that the actual presenter is part of module `Front`, then we will write:
Links may also point to other [modules|directory-structure#Presenters and Templates]. Here, the links are distinguished into relative to the submodules, or absolute. The principle is analogous to disk paths, only instead of slashes there are colons. Let's assume that the actual presenter is part of module `Front`, then we will write:

```latte
<a n:href="Shop:Product:show">link to Front:Shop:Product:show</a>
Expand Down Expand Up @@ -281,6 +281,6 @@ How to create links with the method `link()` comfort, but without the presence o

LinkGenerator is a service that you can have passed through the constructor and then create links using its method `link()`.

There is a difference compared to presenters. LinkGenerator creates all links as absolute URLs. Furthermore, there is no "current presenter", so it is not possible to specify only the name of the action `link('default')` or the relative paths to the [modules].
Compared to presenters, there's a difference. LinkGenerator creates all links directly as absolute URLs. Also, there is no "actual presenter", so you can't just list the action name `link('default')` as the target or list relative paths to modules.

Invalid links always throw `Nette\Application\UI\InvalidLinkException`.
6 changes: 3 additions & 3 deletions application/en/how-it-works.texy
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ The directory structure looks something like this:
└── <b>.htaccess</b> ← prohibits access to all directories except www
\--

You can change the directory structure in any way, rename or move folders, and then just edit the paths to `log/` and `temp/` in the `Bootstrap.php` file and the path to this file in `composer.json` in the `autoload` section. Nothing more, no complicated reconfiguration, no constant changes. Nette has a [smart autodetection|bootstrap#development-vs-production-mode].
You can modify the directory structure however you like, rename or move folders - it's completely flexible. Nette also features smart autodetection and automatically recognizes the application location including its URL base.

For slightly larger applications, we can divide folders with presenters and templates into subdirectories (on disk) and into namespaces (in code), which we call [modules].
For slightly larger applications, we can organize presenter and template folders into [subdirectories |directory-structure#Presenters and templates] and group classes into namespaces, which we call modules.

The `www/` directory is the public directory or document-root of the project. You can rename it without having to set anything else on the application side. You just need to [configure the hosting |nette:troubleshooting#How to change or remove www directory from URL] so that the document-root goes to this directory.

Expand Down Expand Up @@ -75,7 +75,7 @@ Its task is:

What kind of factory? We do not produce tractors, but websites! Hold on, it'll be explained right away.

By "initialize the environment" we mean, for example, that [Tracy |tracy:] is activated, which is an amazing tool for logging or visualizing errors. It logs errors on the production server and displays them directly on the development server. Therefore, initialization also needs to decide whether the site is running in production or developer mode. To do this, Nette uses autodetection: if you run the site on localhost, it runs in developer mode. You don't have to configure anything and the application is ready for both development and production deployment. These steps are performed and described in detail in the chapter about [Bootstrap class |bootstrap].
By "environment initialization" we mean, for example, activating [Tracy|tracy:], which is a fantastic tool for logging and error visualization. On production servers it logs errors, while on development it displays them directly. Therefore, initialization includes determining whether the website runs in production or development mode. For this, Nette uses [smart autodetection|bootstrap#development-vs-production-mode]: if you run the site on localhost, it operates in development mode. No configuration is needed and the application is ready for both development and production deployment. These steps are performed and detailed in the [Bootstrap class|bootstrap] chapter.

The third point (yes, we skipped the second, but we will return to it) is to start the application. The handling of HTTP requests in Nette is done by the class `Nette\Application\Application` (hereinafter referred to as the `Application`), so when we say "run an application", we mean to call a method with the name `run()` on an object of this class.

Expand Down
2 changes: 1 addition & 1 deletion application/en/routing.texy
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ $router->addRoute('<lang cs|en>', function (string $lang) {
Modules
-------

If we have more routes that belong to one [module |modules], we can use `withModule()` to group them:
If we have more routes that belong to one [module |directory-structure#Presenters and Templates], we can use `withModule()` to group them:

```php
$router = new RouteList;
Expand Down
2 changes: 1 addition & 1 deletion application/en/templates.texy
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ app/
└── <b>@layout.latte</b> ← only for Home, 2nd variant
\--

If the presenter is in a [module|modules], it will also search further up the directory tree according to the module's nesting.
If the presenter is in a module, it will also search further up the directory tree according to the module's nesting.

The name of the layout can be changed using `$this->setLayout('layoutAdmin')` and then it will be expected in the file `@layoutAdmin.latte`. You can also directly specify the layout template file using `$this->setLayout('/path/to/template.latte')`.

Expand Down
2 changes: 1 addition & 1 deletion nette/cs/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Aplikace v Nette
- [application:Bootstrap]
- [Presentery |application:presenters]
- [Šablony |application:templates]
- [Moduly |application:modules]
- [Adresářová struktura |application:directory-structure]
- [Routování |application:routing]
- [Vytváření odkazů URL |application:creating-links]
- [Interaktivní komponenty |application:components]
Expand Down
12 changes: 7 additions & 5 deletions nette/cs/glossary.texy
Original file line number Diff line number Diff line change
Expand Up @@ -107,12 +107,14 @@ Architektura, vycházející z [#Model-View-Controller].

Modul
-----
[Modul |application:modules] představuje v Nette Framework balíček presenterů a šablon, případně i komponent a modelů, které dodávají presenteru data. Je to tedy určitá logická část aplikace.
Modul představuje logickou část aplikace. V typickém uspořádání jde o skupinu presenterů a šablon, které řeší určitou oblast funkcionality. Moduly umísťujeme do [samostatných adresářů |application:directory-structure#Presentery a šablony], jako např. `Front/`, `Admin/` nebo `Shop/`.

Například e-shop může mít tři moduly:
1) katalog produktů s košíkem
2) administrace pro zákazníka
3) administrace pro provozovatele
Například e-shop rozdělíme na:
- Frontend (`Shop/`) pro prohlížení produktů a nákup
- Zákaznickou sekci (`Customer/`) pro správu objednávek
- Administraci (`Admin/`) pro provozovatele

Technicky jde o běžné adresáře, které ale díky přehlednému členění pomáhají aplikaci škálovat. Presenter `Admin:Product:List` tak bude fyzicky umístěn například v adresáři `app/Presentation/Admin/Product/List/` (viz [mapování presenterů|application:directory-structure#mapování presenterů]).


Namespace
Expand Down
9 changes: 7 additions & 2 deletions nette/cs/troubleshooting.texy
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,14 @@ Jak změnit či ostranit z URL adresář `www`?
-------------------------------------------
Adresář `www/` používaný u ukázkových projektů v Nette představuje tzv. veřejný adresář neboli document-root projektu. Jde o jediný adresář, jehož obsah je přístupný prohlížeči. A obsahuje soubor `index.php`, vstupní bod, který spouští webovou aplikaci napsanou v Nette.

Pro zprovoznění aplikace na hostingu je potřeba, abyste v konfiguraci hostingu nastavili tzv. document-root do tohoto adresáře. Nebo, pokud hosting má pro veřejný adresář předpřipravenou složku s jiným názvem (například `web`, `public_html` atd.), tak `www/` jednoduše přejmenujte.
Pro zprovoznění aplikace na hostingu je potřeba mít správně nakonfigurovaný document-root. Máte dvě možnosti:
1. V konfiguraci hostingu nastavit document-root na tento adresář
2. Pokud má hosting předpřipravenou složku (např. `public_html`), přejmenujte `www/` na tento název

Řešením **naopak není** zamezit přístupu do všech složek kromě `www/` pomocí pravidel v souboru `.htaccess` nebo v routeru. Pokud by hosting neumožňoval nastavit document-root do podadresáře (tj. vytvářet adresáře o úroveň výš nad veřejným adresářem), poohlédněte se po jiném. Šli byste jinak do značného bezpečnostního rizika. Bylo by to jako bydlet v bytě, kde nejdou zavřít vstupní dveře a jsou stále dokořán.
.[warning]
Nikdy se nesnažte řešit zabezpečení jen pomocí `.htaccess` nebo routeru, které by zamezovaly přístup do ostatních složek.

Pokud by hosting neumožňoval nastavit document-root do podadresáře (tj. vytvářet adresáře o úroveň výš nad veřejným adresářem), poohlédněte se po jiném. Šli byste jinak do značného bezpečnostního rizika. Bylo by to jako bydlet v bytě, kde nejdou zavřít vstupní dveře a jsou stále dokořán.


Jak nastavit server pro hezká URL?
Expand Down
2 changes: 1 addition & 1 deletion nette/en/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Nette Application
- [application:Bootstrap]
- [application:Presenters]
- [application:Templates]
- [application:Modules]
- [Directory structure |application:directory-structure]
- [application:Routing]
- [Creating URL Links |application:creating-links]
- [Interactive Components |application:components]
Expand Down
12 changes: 7 additions & 5 deletions nette/en/glossary.texy
Original file line number Diff line number Diff line change
Expand Up @@ -107,12 +107,14 @@ Architecture based on [#Model-View-Controller].

Module
------
[Module |application:modules] in Nette Framework represents a collection of presenters and templates, eventually also components and models, that serve data to a presenter. So it is certain logical part of an application.
A module represents a logical part of an application. Typically, it's a group of presenters and templates handling a specific functionality area. Modules are placed in [separate directories|application:directory-structure#Presenters and templates], like `Front/`, `Admin/`, or `Shop/`.

For example, an e-shop can have three modules:
1) Product catalogue with basket.
2) Administration for the customer.
3) Administration for the shopkeeper.
For example, an e-shop can be divided into:
- Frontend (`Shop/`) for browsing products and purchasing
- Customer section (`Customer/`) for order management
- Administration (`Admin/`) for operators

Technically, these are regular directories that help scale the application through clear organization. The presenter `Admin:Product:List` would be physically located in directory `app/Presentation/Admin/Product/List/` (see [presenter mapping|application:directory-structure#presenter mapping]).


Namespace
Expand Down
Loading

0 comments on commit 813c74b

Please sign in to comment.