diff --git a/doc/cs/why-use-nette.texy b/doc/cs/10-reasons-why-nette.texy similarity index 88% rename from doc/cs/why-use-nette.texy rename to doc/cs/10-reasons-why-nette.texy index 420e622e1c..47dfc5c428 100644 --- a/doc/cs/why-use-nette.texy +++ b/doc/cs/10-reasons-why-nette.texy @@ -19,7 +19,6 @@ Už vás nebaví řešit opakující se úkoly, tisíce drobností, které odvá A to všechno zcela zdarma. To stojí alespoň za pokus, že? -[* ecommercial.png .[noborder] >] Jak se Nette Framework liší od jiných frameworků? **Nette Framework je stavěný tak, aby byl co nejpoužitelnější a nejvstřícnější.** Jde o framework, s nímž je nejen snadné, ale i zábavné pracovat. Dává vám srozumitelnou a úspornou syntaxi, vychází vám vstříc při programování a debugování, nechává vás soustředit se na kreativní stránku vývoje a nepřidělává vám vrásky. Eliminuje bezpečnostní rizika. Můžete v něm tvořit e-shopy, wiki, blogy, CMS, co jen vymyslíte. Nette Framework [používají významné společnosti |https://builtwith.nette.org] jako třeba T-Systems, GE Money, Mladá fronta, VLTAVA-LABE-PRESS, Internet Info, DHL, Logio, ESET, Actum, Slevomat, Socialbakers, SUPRAPHON, pohání i stránky bývalého prezidenta Václava Klause. V anketě serveru [Zdroják |https://www.zdrojak.cz/clanky/vysledky-technologie-na-ceskem-webu/] byl zvolen jako nejpopulárnější a nejpoužívanější framework v České republice. @@ -30,8 +29,7 @@ Když se naučíte Nette Framework, nebudete mít nouzi o zajímavé pracovní n Chci začít! ----------- -[* icon-multimedia.png .[noborder] >] -Podle návodu krok za krokem [vytvořte první aplikaci |quickstart/getting-started]. Neustále vám bude po ruce kompletní [příručka programátora |homepage] a praktická [API dokumentace |https://api.nette.org/] s přehledem tříd a metod. +Podle návodu krok za krokem [vytvořte první aplikaci |quickstart/getting-started]. Neustále vám bude po ruce kompletní [příručka programátora |@home] a praktická [API dokumentace |https://api.nette.org/] s přehledem tříd a metod. Když narazíte na nejasnost, můžete ji konzultovat se stránkou [řešící časté dotazy |troubleshooting] nebo na [českém diskusním fóru |https://forum.nette.org/cs/]. @@ -41,7 +39,6 @@ Zdá se vám výuka samostudiem jako neefektivní cesta? Rozumíme a nabízíme Chci víc informací! ------------------- -[* application-icon-80x80-r6-r1-c7-s1.png .[noborder] >] Máme pro vás připravený [blog plný tipů |https://blog.nette.org], kolekci nejrůznějších [doplňků a komponent |https://componette.org] pro použití ve vašich aplikacích. Ale to není vše. Komunita kolem Nette Frameworku se každý měsíc schází na [Posledních sobotách |www.posobota.cz], kde si vyměňuje své zkušenosti. Stavte se někdy na pivko! @@ -50,7 +47,9 @@ Ale to není vše. Komunita kolem Nette Frameworku se každý měsíc schází n Chci se zapojit! ---------------- -[* communication-80x80-r9-r1-c1-s1.png .[noborder] >] Budeme moc rádi, pokud přispějete svým dílem k vývoji frameworku. Třeba tím, že framework doporučíte, umístíte si na web [ikonku |www:logo], nebo [podpoříte vývoj finančně |www:donate]. Děkujeme ♥ -Můžete se také podělit o své znalosti a napsat článek či natočit screencast na [Planette |pla:]. Nebo přidat svůj [doplněk |https://componette.org]. Bude skvělé, když se zapojíte do [psaní či překládání dokumentace |www:writing]. Nebo rovnou do samotného [vývoje frameworku|www:contributing]. Jste tu vítáni. +Můžete se také podělit o své znalosti a napsat článek či natočit screencast na [Planette |pla:]. Nebo přidat svůj [doplněk |https://componette.org]. Bude skvělé, když se zapojíte do [psaní či překládání dokumentace |contributing/documentation]. Nebo rovnou do samotného [vývoje frameworku|contributing/code]. Jste tu vítáni. + + +{{leftbar: @menu-common}} diff --git a/doc/cs/@home.texy b/doc/cs/@home.texy new file mode 100644 index 0000000000..03a7177104 --- /dev/null +++ b/doc/cs/@home.texy @@ -0,0 +1,92 @@ +Dokumentace Nette +***************** + +
-"application .[prism-token prism-atrule]":[#Application]: "Application .[prism-token prism-comment]"Chcete-li zapsat řetězec začínající znakem `@` nebo obsahující `%`, musíte znak escapovat zdvojením na `@@` nebo `%%`. .[note] -Application -=========== - -Základní nastavení chování [Nette Application|application]. - -```neon -application: - # zobrazit "Nette Application" panel v Tracy BlueScreen? - debugger: ... # (bool) výchozí je true - - # bude se při chybě volat error-presenter? - catchExceptions: ... # (bool) výchozí je true v produkčním režimu - - # název error-presenteru - errorPresenter: Error # (string) výchozí je 'Nette:Error' - - # chybné odkazy negenerují varování? - # má efekt pouze ve vývojářském režimu - silentLinks: ... # (bool) výchozí je false -``` - -Protože ve vývojovém režimu se error-presentery standardně nevolají a chybu zobrazí až Tracy, změnou hodnoty `catchExceptions` na `true` můžeme při vývoji ověřit jejich správnou funkčnost. - -Volba `silentLinks` určuje, jak se Nette zachová ve vývojářském režimu, když selže generování odkazu (třeba proto, že neexistuje presenter, atd). Výchozí hodnota `false` znamená, že Nette vyhodí `E_USER_WARNING` chybu. Nastavením na `true` dojde k potlačení této chybové hlášky. V produkčním prostředí se `E_USER_WARNING` vyvolá vždy. Toto chování můžeme také ovlivnit nastavením proměnné presenteru [$invalidLinkMode|creating-links#neplatne-odkazy]. - - -Mapování --------- - -Definuje pravidla, podle kterých se z názvu presenteru (třeba `Homepage`) odvodí název třídy (třeba `App\Presenters\HomepagePresenter`). Právě takového mapování lze docílit následující konfigurací: - -```neon -application: - mapping: - *: App\Presenters\*Presenter -``` - -Název presenteru se nahradí za hvezdičku a výsledkem je název třídy. Snadné! - -Pokud presentery členíme do modulů, můžeme pro každý modul mít vlastní mapování: - -```neon -application: - mapping: - Front: App\Modules\Front\*Presenter - Admin: App\Modules\Admin\*Presenter - Api: App\Api\*Presenter -``` - -Nyní se presenter `Front:Homepage` mapuje na třídu `App\Modules\Front\HomepagePresenter` a presenter `Admin:Dashboard` na třídu `App\Modules\Admin\DashboardPresenter`. - -Šikovnější bude vytvořit obecné (hvězdičkové) pravidlo, které první dvě nahradí a přibude v něm hvezdička navíc právě pro modul: - -```neon -application: - mapping: - *: App\Modules\*\*Presenter - Api: App\Api\*Presenter -``` - -Opět presenter `Front:Homepage` namapuje na třídu `App\Modules\Front\HomepagePresenter`. - -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\EditPresenter`. - -Alternativním zápisem je místo řetězce použít pole skládající se ze tří segmentů: - -```neon -application: - mapping: - *: [App\Modules, *, *Presenter] -``` - -Tento zápis je ekvivalentní s původním `App\Modules\*\*Presenter`. - -Výchozí hodnotou je `*: *Module\*Presenter`. - - -Automatická registrace presenterů ---------------------------------- - -Nette automaticky přidává presentery jako služby do DI kontejneru, což zásadně zrychlí jejich vytváření. Jak Nette presentery dohledává lze konfigurovat: - -```neon -application: - # hledat presentery v Composer class map? - scanComposer: ... # (bool) výchozí je true - - # maska, které musí vyhovovat název třídy a souboru - scanFilter: ... # (string) výchozí je '*Presenter' - - # ve kterých adresářích hledat presentery? - scanDirs: # (string[]|false) výchozí je '%appDir%' - - %vendorDir%/mymodule -``` - -Adresáře uvedené v `scanDirs` nepřepisují výchozí hodnotu `%appDir%`, ale doplňují ji, `scanDirs` tedy bude obsahovat obě cesty `%appDir%` a `%vendorDir%/mymodule`. Pokud bychom chtěli výchozí adresář vynechat, použijeme [vykřičník |di-configuration#Slučování], který hodnotu přepíše: - -```neon -application: - scanDirs!: - - %vendorDir%/mymodule -``` - -Skenování adresářů lze vypnout uvedením hodnoty false. Nedoporučujeme úplně potlačit automatické přidávání presenterů, protože jinak dojde ke snížení výkonu aplikace. - - -Konstanty -========= - -Vytváření PHP konstant. - -```neon -constants: - FOOBAR: 'baz' -``` - -Po nastartování aplikace bude vytvořena konstanta `FOOBAR`. - - -Databáze -======== - -Konfigurace jednoho či více databázových spojení pro [Nette Database |database]. - -```neon -database: - # DSN, jediný povinný klíč - dsn: "sqlite:%appDir%/Model/demo.db" - - # uživatelské jméno - user: ... - - # heslo - password: ... -``` - -Vytvoří služby typu `Nette\Database\Connection` a také `Nette\Database\Explorer` pro vrstvu [Database Explorer]. Databáze se obvykle předává autowiringem, není-li to možné, použijte názvy služeb `@database.default.connection` resp. `@database.default.context`. - -Další nastavení: - -```neon -database: - # zobrazit database panel v Tracy Bar? - debugger: ... # (bool) výchozí je true - - # zobrazit EXPLAIN dotazů v Tracy Bar? - explain: ... # (bool) výchozí je true - - # povolit autowiring pro toto spojení? - autowired: ... # (bool) výchozí je true u prvního připojení - - # konvence tabulek: discovered, static nebo jméno třídy - conventions: discovered # (string) výchozí je 'discovered' - - options: - # připojovat se k databázi teprve když je potřeba? - lazy: ... # (bool) výchozí je false - - # PHP třída ovladače databáze - driverClass: # (string) - - # lze uvádět volby, které najdete v dokumentaci ovladačů PDO - PDO::MYSQL_ATTR_COMPRESS: true - - # pouze MySQL: nastaví sql_mode - sqlmode: # (string) - - # pouze MySQL: nastaví SET NAMES - charset: # (string) výchozí je 'utf8mb4' ('utf8' před verzí 5.5.3) - - # pouze Oracle a SQLite: formát pro ukládání data - formatDateTime: # (string) výchozí je 'U' -``` - -V konfiguraci můžeme definovat i více databázových spojení rozdělením do pojmenovaných sekcí: - -```neon -database: - main: - dsn: 'mysql:host=127.0.0.1;dbname=test' - user: root - password: password - - another: - dsn: 'sqlite::memory:' -``` - -Každé takto definované spojení vytváří služby zahrnující v názvu i název sekce, tj. `@database.main.connection` & `@database.main.context` a dále `@database.another.connection` & `@database.another.context`. - -Autowiring je zapnutý jen u služeb z první sekce. Lze to změnit pomocí `autowired: false` nebo `autowired: true`. Neautowirované služby předáváme explicitně: - -```neon -services: - - UserFacade(@database.another.connection) -``` - - -Formuláře -========= - -V konfiguraci lze změnit výchozí [chybové hlášky formulářů|form-validation]. - -```neon -forms: - messages: - EQUAL: 'Zadejte %s.' - NOT_EQUAL: 'Tato hodnota by neměla být %s.' - FILLED: 'Toto pole je povinné.' - BLANK: 'Toto pole by mělo být prázdné.' - MIN_LENGTH: 'Zadejte prosím alespoň %d znaků.' - MAX_LENGTH: 'Zadejte prosím maximálně %d znaků.' - LENGTH: 'Zadejte prosím hodnotu %d až %d znaků dlouho.' - EMAIL: 'Zadejte platnou e-mailovou adresu.' - URL: 'Zadejte prosím platné URL.' - INTEGER: 'Zadejte platné celé číslo.' - FLOAT: 'Zadejte platné číslo.' - MIN: 'Zadejte prosím hodnotu větší nebo rovnou %d.' - MAX: 'Zadejte prosím hodnotu menší nebo rovnou %d.' - RANGE: 'Zadejte hodnotu mezi %d a %d.' - MAX_FILE_SIZE: 'Velikost nahraného souboru může být nejvýše %d bytů.' - MAX_POST_SIZE: 'Nahraná data překračují limit %d bytů.' - MIME_TYPE: 'Nahraný soubor není v očekávaném formátu.' - IMAGE: 'Nahraný soubor musí být obraz ve formátu JPEG, GIF, PNG nebo WebP.' - Nette\Forms\Controls\SelectBox::VALID: 'Vyberte prosím platnou možnost.' - Nette\Forms\Controls\UploadControl::VALID: 'Při nahrávání souboru došlo k chybě.' - Nette\Forms\Controls\CsrfProtection::PROTECTION: 'Vaše relace vypršela. Vraťte se na domovskou stránku a zkuste to znovu.' -``` - - -HTTP hlavičky -============= - -```neon -http: - # hlavičky, které se s každým požadavkem odešlou - headers: - X-Powered-By: MyCMS - X-Content-Type-Options: nosniff - X-XSS-Protection: '1; mode=block' - - # ovlivňuje hlavičku X-Frame-Options - frames: ... # (string|bool) výchozí je 'SAMEORIGIN' -``` - -Framework z bezpečnostních důvodů odesílá hlavičku `X-Frame-Options: SAMEORIGIN`, která říká, že stránku lze zobrazit uvnitř jiné stránky (v elementu `
-"constants .[prism-token prism-atrule]":[#Konstanty]: "Definice PHP konstant .[prism-token prism-comment]"
-"database .[prism-token prism-atrule]":[#Databáze]: "Databáze .[prism-token prism-comment]"
-"decorator .[prism-token prism-atrule]":[di-configuration#decorator]: "Dekorátor .[prism-token prism-comment]"
-"di .[prism-token prism-atrule]":[di-configuration#DI]: "DI kontejner .[prism-token prism-comment]"
-"extensions .[prism-token prism-atrule]":[di-configuration#Rozšíření]: "Instalace dalších DI rozšíření .[prism-token prism-comment]"
-"forms .[prism-token prism-atrule]":[#Formuláře]: "Formuláře .[prism-token prism-comment]"
-"http .[prism-token prism-atrule]":[#HTTP hlavičky]: "HTTP hlavičky .[prism-token prism-comment]"
-"includes .[prism-token prism-atrule]":[di-configuration#Vkládání souborů]: "Vkládání souborů .[prism-token prism-comment]"
-"latte .[prism-token prism-atrule]":[#Šablony Latte]: "Šablony Latte .[prism-token prism-comment]"
-"mail .[prism-token prism-atrule]":[#Maily]: "Maily .[prism-token prism-comment]"
-"parameters .[prism-token prism-atrule]":[di-configuration#parametry]: "Parametry .[prism-token prism-comment]"
-"php .[prism-token prism-atrule]":[#Php]: "PHP konfigurace .[prism-token prism-comment]"
-"routing .[prism-token prism-atrule]":[#Routování]: "Routování .[prism-token prism-comment]"
-"search .[prism-token prism-atrule]":[di-configuration#Search]: "Automatická registrace služeb .[prism-token prism-comment]"
-"security .[prism-token prism-atrule]":[#Přístupová oprávnění]: "Přístupová oprávnění .[prism-token prism-comment]"
-"services .[prism-token prism-atrule]":[di-services]: "Služby .[prism-token prism-comment]"
-"session .[prism-token prism-atrule]":[#Session]: "Session .[prism-token prism-comment]"
-"tracy .[prism-token prism-atrule]":[#Tracy debugger]: "Tracy debugger .[prism-token prism-comment]" +"application .[prism-token prism-atrule]":[application/configuration#Application]: "Application .[prism-token prism-comment]"
+"constants .[prism-token prism-atrule]":[application/configuration#Konstanty]: "Definice PHP konstant .[prism-token prism-comment]"
+"database .[prism-token prism-atrule]":[database/configuration]: "Databáze .[prism-token prism-comment]"
+"decorator .[prism-token prism-atrule]":[dependency-injection/configuration#decorator]: "Dekorátor .[prism-token prism-comment]"
+"di .[prism-token prism-atrule]":[dependency-injection/configuration#DI]: "DI kontejner .[prism-token prism-comment]"
+"extensions .[prism-token prism-atrule]":[dependency-injection/configuration#Rozšíření]: "Instalace dalších DI rozšíření .[prism-token prism-comment]"
+"forms .[prism-token prism-atrule]":[forms/configuration]: "Formuláře .[prism-token prism-comment]"
+"http .[prism-token prism-atrule]":[http/configuration#HTTP hlavičky]: "HTTP hlavičky .[prism-token prism-comment]"
+"includes .[prism-token prism-atrule]":[dependency-injection/configuration#Vkládání souborů]: "Vkládání souborů .[prism-token prism-comment]"
+"latte .[prism-token prism-atrule]":[application/configuration#Šablony Latte]: "Šablony Latte .[prism-token prism-comment]"
+"mail .[prism-token prism-atrule]":[mail/configuration]: "Maily .[prism-token prism-comment]"
+"parameters .[prism-token prism-atrule]":[dependency-injection/configuration#parametry]: "Parametry .[prism-token prism-comment]"
+"php .[prism-token prism-atrule]":[application/configuration#Php]: "PHP konfigurace .[prism-token prism-comment]"
+"routing .[prism-token prism-atrule]":[application/configuration#Routování]: "Routování .[prism-token prism-comment]"
+"search .[prism-token prism-atrule]":[dependency-injection/configuration#Search]: "Automatická registrace služeb .[prism-token prism-comment]"
+"security .[prism-token prism-atrule]":[security/configuration]: "Přístupová oprávnění .[prism-token prism-comment]"
+"services .[prism-token prism-atrule]":[dependency-injection/services]: "Služby .[prism-token prism-comment]"
+"session .[prism-token prism-atrule]":[http/configuration#Session]: "Session .[prism-token prism-comment]"
+"tracy .[prism-token prism-atrule]":[tracy:configuring#Nette Framework]: "Tracy debugger .[prism-token prism-comment]"