Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
ec88013
improved translation
dg Apr 19, 2025
1bac6f9
added .perex
dg Apr 15, 2025
26c7b95
links normalization
dg Apr 19, 2025
2026215
typo
dg May 19, 2025
c687011
nette/bootstrap 3.2.6
dg May 22, 2025
79e6b28
application/bootstrap -> bootstrapping
dg May 27, 2025
0ee1126
unification of titles
dg May 27, 2025
6847eb3
added nette assets
dg May 27, 2025
18f6ccc
typo
dg Jun 24, 2025
aee4e19
latte 3.0.22
dg Jun 24, 2025
1fc4203
fixed a typo
vrana Jun 30, 2025
eb99005
typo
vrana Jul 9, 2025
99e6e41
nette/application 3.2.7
dg Jul 17, 2025
8698e2d
php-generator: version is 4.x
dg Aug 6, 2025
fc8bf33
nette/tester 2.5.6
dg Aug 6, 2025
4b11ab9
Typo
vrana Aug 8, 2025
2df0ae5
presenter: info about AbortException
dg Sep 16, 2025
d4b6c50
ajax: linked best practices
vrana Sep 23, 2025
9c50e2c
typo
vrana Oct 3, 2025
ea99f4d
php2latte & twig2latte moved to fiddle.nette.org
dg Oct 20, 2025
af26df1
tests: added coverage.html
dg Oct 20, 2025
1b572cb
added @meta
dg Oct 22, 2025
fcc353d
neon: link to fiddle
dg Apr 27, 2026
bb5328c
removed null as an array offset
dg Oct 31, 2025
5252e29
typo [Closes #1081]
jtojnar Sep 27, 2025
582d416
latte 3.1.0
dg Nov 26, 2025
690447b
application: improved info about attributes, added #[Deprecated]
dg Nov 29, 2025
b9167f4
application: improved info about template variables and extensions
dg Nov 29, 2025
720dd62
nette/utils 4.0.10
dg Dec 1, 2025
d7b4417
nette/application 3.2.9
dg Nov 29, 2025
2c39c38
adding missing stuff in nette/http
dg Dec 27, 2025
6e83cc1
used first-class callables
dg Jan 4, 2026
039f180
added coding standard section about global functions and constants
dg Jan 6, 2026
12de947
Tester 2.6: updated documentation for php.ini loading behavior change
dg Jan 6, 2026
b4a3c5f
typo
dg Aug 1, 2026
1ec9e4b
replaced bg, el, hu, pt, ro, sl and uk with redirects to English
dg Aug 1, 2026
0334537
docs: replaced typographic quotes and dashes with plain ASCII
dg Aug 1, 2026
57fdc84
added ai.nette.org
dg Jan 8, 2026
870b312
added ai.nette.org
dg Sep 24, 2026
c47116c
latte 3.1.2
dg Jan 23, 2026
a1401e7
latte: info about whitespace
dg Mar 17, 2026
97eabb4
latte 3.1.3
dg Dec 23, 2025
2661673
typo
dg Feb 23, 2026
c2da990
latte: changed user template
dg Apr 13, 2026
b7aaa50
php-generator: v4.2.2
dg Feb 23, 2026
b7dce0f
di: documented @Type as service key for modifications
dg Mar 5, 2026
5bf058e
nette/mail 4.1.0
dg Mar 27, 2026
bd54cfa
updated links to PhpStorm plugins
dg Apr 12, 2026
fd08f77
tracy: open-files-in-ide updated Chrome policy to AutoLaunchProtocols…
dg Apr 12, 2026
db4300a
coding standard: added enums.php convention
dg Apr 6, 2026
ac6f04d
latte 3.1.4
dg Dec 23, 2025
9b11cac
latte: develop.texy adds 'Ways to Extend Latte' overview
dg Apr 25, 2026
7e98c0c
nette: add emoji icons to documentation home links
dg Apr 25, 2026
4355b2d
nette/utils 4.1.4
dg May 11, 2026
e2844ba
nette/database 3.2.9
dg May 17, 2026
df57c10
database: renamed mapping.texy to type-conversion.texy
dg May 17, 2026
3b7e179
nette/mail 4.1.2
dg May 19, 2026
e8b54a2
best-practices: add 'Pretty URLs with Slugs' guide
dg May 20, 2026
deaa84b
latte: improve and clarify the grouping cookbook
dg May 22, 2026
c94582a
nette/security 3.2.4
dg May 23, 2026
d41db6b
added tools
dg Jun 6, 2026
08779c7
moved code-checker to tools
dg Jun 6, 2026
020bab7
moved editor-and-tools to tools:ide
dg Jun 6, 2026
3d0267e
improved code-checker
dg Jun 6, 2026
a106e26
improved IDE
dg Jun 6, 2026
af94b88
added Coding Standard page
dg Jun 6, 2026
7a00270
added Nette PHPStan Rules page
dg May 25, 2026
d7cab04
added X-ray page
dg Jun 6, 2026
eb928b4
tracy 2.12.0
dg May 25, 2026
5eaa38f
nette/http 3.3.4
dg May 26, 2026
91ea3fe
nette/http 3.4.0
dg Jun 2, 2026
8a12965
improved homepages
dg Jun 14, 2026
0a9108a
nette/forms 3.3.0
dg Jun 24, 2026
e9f357b
nette/forms - custom controls guide
dg Jul 2, 2026
9b815f8
nette/application 3.3.0
dg Jun 24, 2026
c216a1d
latte: added headers
dg Jun 28, 2026
d2e107f
latte sandbox: document implicit __toString() coercion is not policed
dg Jun 28, 2026
8ee3fb8
added nette/command-line
dg Jul 5, 2026
cdc489d
typos
dg Jul 4, 2026
89fe006
application: fixes based on documentation audit against the code
dg Jul 4, 2026
ee219c2
assets: fixes based on documentation audit against the code
dg Jul 4, 2026
52565c8
caching: fixes based on documentation audit against the code
dg Jul 5, 2026
5048450
component-model: fixes based on documentation audit against the code
dg Jul 4, 2026
3364e59
database: fixes based on documentation audit against the code
dg Jul 4, 2026
f39ee1e
dependency-injection: fixes based on documentation audit against the …
dg Jul 5, 2026
3a3c794
forms: fixes based on documentation audit against the code
dg Jul 5, 2026
612d3fb
http: fixes based on documentation audit against the code
dg Jul 5, 2026
9428e4b
neon: fixes based on documentation audit against the code
dg Jul 5, 2026
31395b2
mail: fixes based on documentation audit against the code
dg Jul 5, 2026
cf36426
latte: fixes based on documentation audit against the code
dg Jul 5, 2026
bb15099
php-generator: fixes based on documentation audit against the code
dg Jul 5, 2026
919844e
robot-loader: fixes based on documentation audit against the code
dg Jul 5, 2026
adcb319
safe-stream: fixes based on documentation audit against the code
dg Jul 5, 2026
252619b
security: fixes based on documentation audit against the code
dg Jul 5, 2026
d2bf941
schema: fixes based on documentation audit against the code
dg Jul 5, 2026
8c238ca
tester: fixes based on documentation audit against the code
dg Jul 5, 2026
038869f
tokenizer: fixes based on documentation audit against the code
dg Jul 5, 2026
e02baa3
tracy: fixes based on documentation audit against the code
dg Jul 5, 2026
15e5f6c
utils: fixes based on documentation audit against the code
dg Jul 5, 2026
8ecd216
contributing: proofread and fixed texts
dg Aug 10, 2026
dbff643
www: proofread and fixed texts
dg Aug 11, 2026
74d8b07
best-practices: proofread and fixed texts
dg Aug 10, 2026
e198e2f
quickstart: proofread and fixed texts
dg Aug 10, 2026
64969cd
nette: fixed English grammar
dg Aug 10, 2026
f81cdaf
www: added photo of the early development environment to history
dg Aug 1, 2026
b7a7c95
nette/component-model 4.0.0
dg Jul 4, 2026
6c64d91
meta: loosen versions to whole major (3.x, 4.x)
dg Jul 4, 2026
1e9f442
assets: document Docker development and the Vite plugin host option (…
jeremy-step Jul 5, 2026
4b9e3e2
troubleshooting: cannot sent header
dg Jul 11, 2026
38d544f
migrations: split global upgrade guides into per-package Upgrading pages
dg Jul 11, 2026
393340b
nette: added links to Nette AI, Bootstrap, Component Model, OOP intro…
dg Jul 31, 2026
9aaaa90
reworked left menus across the documentation
dg Jul 30, 2026
c11cd73
disabled the left menu on landing pages via {{leftbar: no}}
dg Jul 31, 2026
e76e2d6
nette/utils 4.1.5
dg Jul 17, 2026
ba27f2e
nette/security v3.2.6
dg Jul 24, 2026
92ef6ed
nette/mail 4.2.0
dg Jul 27, 2026
f3b19ee
latte v3.1.5
dg Jul 25, 2026
43b1004
latte v3.1.6
dg Jul 27, 2026
c1ba7d5
synced all language mutations with the cs/en baseline
dg Sep 23, 2026
ce02c09
added links to the "by example" courses
dg Aug 4, 2026
457c546
assets: document new @nette/vite-plugin options (refresh, appUrl, hos…
dg Jul 11, 2026
400f324
meta.json: added explicit api URL to books with API docs
dg Aug 25, 2026
a7e613b
routing and AI pages declare their own repo and api next to composer
dg Sep 24, 2026
743d2e2
contributions: changed texy homepage
dg Sep 18, 2026
3ad9776
added CLAUDE.md
dg Dec 28, 2025
2b062f4
nette/di v3.2.7
dg Aug 27, 2026
b641509
WIP
dg Sep 23, 2026
d396a6d
ai: claude-code page renamed to agent-plugins, documented Codex
dg Sep 23, 2026
81069e0
latte: documented that null drops URL attributes too
vrana Oct 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
12 changes: 9 additions & 3 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
.gitattributes export-ignore
.gitignore export-ignore
*.texy linguist-language=Text
.gitattributes export-ignore
.github/ export-ignore
.gitignore export-ignore
AGENTS.md export-ignore
docs/ export-ignore
tests/ export-ignore

*.php* diff=php
*.sh text eol=lf
347 changes: 347 additions & 0 deletions AGENTS.md

Large diffs are not rendered by default.

97 changes: 97 additions & 0 deletions ai/cs/@home.texy
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
Vibe coding s Nette
*******************

<div class=perex>

AI agent vám za pár sekund napíše sto řádků PHP. Jestli budou opravdu fungovat, o tom rozhoduje něco, co si agent sám obstarat nedokáže: základ, který si umí přečíst a ověřit a na kterém může stavět.

Nette ho buduje léta, už v době, kdy to vypadalo jako detail pro fajnšmekry.

- **Otypované do morku kostí** - agent typy čte, místo aby je hádal
- **Jasné konvence** - ví, kam která třída patří
- **Uzavřená smyčka** - vidí vaši skutečnou aplikaci a kontroluje si vlastní práci

</div>


IDE bylo pro člověka, analýza je pro stroj
==========================================

Roky jsme nástroje milovali za našeptávač, za typ, který vyskočí při najetí myší, za skok na definici. To všechno je ale pomoc pro lidské oko a ruku. Agent obrazovku nečte. Potřebuje informaci, kterou si přečte jako text a hlavně si ji umí ověřit sám.

V tom je celý rozdíl mezi IDE a statickou analýzou. PhpStorm vám decentně podtrhne místo, kde možná předáváte `null`. PHPStan tutéž věc napíše do konzole jako chybu, kterou agent přečte, pochopí a opraví, aniž byste u toho museli sedět.

Otázka proto už nezní "jak hezky mi editor popíše tohle API?", ale "kolik toho o sobě říká sám kód?"


Nette toho říká hodně
=====================

Když PHP 7.1 doplnilo typový systém o nullable typy, bylo Nette vůbec prvním full-stack frameworkem, který si otypoval celé své API, včetně `declare(strict_types=1)` v každém souboru. Jakmile PHP 7.4 přidalo typované property, Nette je převzalo. Co uměl jazyk vyjádřit nativně, to Nette používalo, většinou dřív než ostatní.

A tam, kde nativní typy nestačí, nastupují anotace. PHP neumí zapsat "neprázdný seznam řetězců" ani "návratová hodnota závisí na argumentu". Nette obojí zapíše, přesně tam, kde na tom záleží:

```php
$data = $form->getValues(RegistrationData::class);
echo $data->email; // $data je RegistrationData, plně otypované
```

Žádný nativní typ PHP tohle nezvládne: "když ti předám jméno třídy, vrátíš mi instanci té třídy". Podmíněný návratový typ to zvládne a přečte si ho statická analýza, vaše IDE i agent. Napíšete `$data->emial` a chybu máte ještě před spuštěním.

Stejná péče prostupuje celým frameworkem: array shapes, `class-string<T>`, `positive-int`, `non-empty-string`. **Všechny balíčky Nette procházejí PHPStanem na plný level 8**, ne jen části, ne s hromadou výjimek. Stavíte na základu otypovaném tak důsledně, jak to jen jde. A na dobře otypovaném základu se snadno staví dobře otypovaná aplikace.

.[note]
Celý příběh najdete v článku [AI agent je tak dobrý, jak dobré jsou vaše typy |https://blog.nette.org/cs/agenti-a-typova-kontrola].


Celé je to o smyčce
===================

Agent je přesně tak dobrý, jak dobrá je zpětná vazba, kterou dostává. A ta nejlepší je smyčka. Něco napíše, spustí statickou analýzu a testy, přečte si výsledek, opraví chybu a zkusí to znovu. Napiš, ověř, oprav, opakuj. Tomuhle cyklu se říká agentní smyčka a je to okamžik, kdy se z generátoru textu stane něco, co kód opravdu doladí do funkčního stavu.

Nette mu dá do ruky všechno, co k tomu potřebuje:

- **PHPStan** s [rozšířením pro Nette |tools:phpstan-rules], které analyzátor naučí specifika frameworku: ví, že `$this['menu']` je vaše `MenuControl`, odvodí typ prvku z `addText()`, rozumí `#[Inject]`
- **[Nette Tester |tester:]** na testy. Zatím žádné nemáte? Nechte si je od agenta vygenerovat jako úplně první věc, protože bez nich nemá jak poznat, že něco rozbil.
- **Automatický lint** PHP, Latte, NEON, JSON a JavaScriptu po každé jednotlivé úpravě, takže rozbitá šablona se nikdy nedostane až do prohlížeče


Vaše aplikace, ne odhad
=======================

Požádejte libovolnou AI, ať "vygeneruje entitu pro tabulku product", a bude vaše sloupce hádat podle vzorů, které pochytila při trénování. Jenže sloupec s cenou se u vás jmenuje `unit_price` a je tam `currency_id`, o kterém jste se nezmínili.

**[MCP Inspector |mcp-inspector]** hádání odstraní. Je to server, díky kterému se agent podívá přímo do vaší běžící aplikace: na služby v DI kontejneru, na skutečné schéma databáze, na routy, na logy Tracy. Všechno je výhradně pro čtení a funguje to v každém editoru, který podporuje Model Context Protocol: Claude Code, Cursor, VS Code a další.

Mění se i ladění. Místo kopírování stack trace do chatu řeknete "koukni do logu a zjisti, co se rozbilo", a agent si výjimku přečte sám.


Agent, který zná Nette
======================

**[Pluginy pro Claude Code a Codex |agent-plugins]** dodají to, co ve vašem kódu nikde nenajde: jak se věci v Nette dělají. Celá rodina skills pokrývá architekturu, formuláře, databázi, komponenty, bezpečnost, Latte, NEON a další. Každý se zapne sám, jakmile na jeho téma přijde řeč. Zeptáte se na validaci formuláře a naskočí skill pro formuláře. Zeptáte se na BlueScreen a naskočí ten pro Tracy.

Výsledek vypadá, jako by ho psal někdo, kdo Nette dělá roky, ne jako obecné PHP poslepované z útržků.


Jak začít
=========

Celé nastavení zabere zhruba deset minut:

1. [Nainstalujte si AI nástroj |getting-started], doporučujeme Claude Code
2. [Přidejte pluginy pro Nette |agent-plugins], aby agent znal framework
3. [Nastavte MCP Inspector |mcp-inspector], aby znal *vaši* aplikaci

Pak už jen popište, co chcete, zavřete agenta do smyčky a nechte ho pracovat. Až budete chtít z agenta vytěžit víc, přečtěte si [Vibe coding v praxi |vibe-coding].


Když má s AI pracovat i vaše aplikace
=====================================

Celá tahle stránka je o AI, která pomáhá psát kód. Uvnitř vaší aplikace ale může AI dělat docela jinou práci: shrnout článek, roztřídit příchozí dotazy, vytáhnout z faktury údaje do databáze.

Na to je [AI Access |https://ai-access.deegee.dev], PHP knihovna s jedním rozhraním pro OpenAI, Claude, Gemini, DeepSeek i Grok. Přepnutí mezi nimi je změna jediného řádku. A protože nemá žádné závislosti, nepřitáhne vám do projektu SDK od výrobce ani konflikty verzí.

{{maintitle: Vibe coding s Nette – PHP framework, kterému AI agent rozumí}}
{{description: AI agenti hádají přesně tolik, kolik jim váš kód dovolí. Nette je otypované do morku kostí, prochází PHPStanem na level 8 a dává agentovi ověřitelnou smyčku.}}
5 changes: 5 additions & 0 deletions ai/cs/@left-menu.texy
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
- [Úvod |@home]
- [Začínáme |getting-started]
- [Pluginy pro agenty |agent-plugins]
- [MCP Inspector |mcp-inspector]
- [Vibe coding v praxi |vibe-coding]
1 change: 1 addition & 0 deletions ai/cs/@meta.texy
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{{sitename: Nette AI}}
1 change: 1 addition & 0 deletions ai/cs/guide.texy
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{{redirect: @home}}
Loading
Loading