Nette Documentation Preview

syntax
Přechod na verzi 2.2
********************

Verze 2.2 přichází s úplně novou infrastrukturou. Původní repozitář "Nette":https://github.com/nette/nette byl rozdělen do nových samostatných komponent. .[perex]

Nette bylo rozděleno do samostatných komponent "Application":https://github.com/nette/application, "Bootstrap":https://github.com/nette/bootstrap, "Caching":https://github.com/nette/caching, "ComponentModel":https://github.com/nette/component-model, "Nette Database":https://github.com/nette/database, "DI":https://github.com/nette/di, "Finder":https://github.com/nette/finder, "Forms":https://github.com/nette/forms, "Http":https://github.com/nette/http, "Latte":https://github.com/nette/latte, "Mail":https://github.com/nette/mail, "Neon":https://github.com/nette/neon, "PhpGenerator":https://github.com/nette/php-generator, "Reflection":https://github.com/nette/reflection, "RobotLoader":https://github.com/nette/robot-loader, "SafeStream":https://github.com/nette/safe-stream, "Security":https://github.com/nette/security, "Tokenizer":https://github.com/nette/tokenizer, "Tracy":https://github.com/nette/tracy a "Utils":https://github.com/nette/utils.
Každá komponenta má vlastní repozitář, issue tracker a číslování verzí.

Stále si však můžete stáhnout celý framework nebo jej nainstalovat pomocí [Composeru |best-practices:composer] příkazem `composer require nette/nette`.


Tracy
-----

Laděnka byla přejmenována na `Tracy`, místo názvu `Nette\Diagnostics\Debugger` se tedy používá `Tracy\Debugger`. Původní třída je z důvodu zpětné kompatibility stále funkční.

Pokud píšete doplňky, prefix názvů CSS tříd se změnil z `nette-` na `tracy-` a třída `nette-toggle-collapsed` na dvojici `tracy-toggle tracy-collapsed`. Původní třídy jsou u starých doplňku změněny na nové automaticky.


Latte
-----

Šablonovací systém byl vždy poměrně úzce provázán s dalšími částmi frameworku, zejména třídami z jmenného prostoru `Nette\Templating`. Aby bylo Latte samostatně použitelné, bylo potřeba mu vymyslet nové snadno použitelné API, které se obejde bez těchto pomocných tříd. A vypadá takto:

```php
$latte = new Latte\Engine; // nikoliv Nette\Latte\Engine
$latte->setTempDirectory('/path/to/cache');

$latte->addFilter('money', function ($val) { return /* ... */; }); // dříve registerHelper()

$latte->onCompile[] = function ($latte) {
	$latte->addMacro(/* ... */); // when you want add some own macros, see http://goo.gl/d5A1u2
};

$latte->render('template.latte', $parameters);
// or $html = $latte->renderToString('template.latte', $parameters);
```

Jak vidíte, Latte si řeší samo načítání šablon a jejich kešování, čímž pádem původní `FileTemplate` a vlastně celý `Nette\Templating` z velké míry pozbývá na smyslu existence. Tyto třídy i nadále fungují a snaží se zajistit kompatibilitu s novým Latte, nicméně jsou zavržené. Ze stejného důvodu jsou zavržené i třídy `Nette\Utils\LimitedScope`, `Nette\Caching\Storages\PhpFileStorage` a služba `templateCacheStorage`.

Naopak Application přináší vlastní třídu `Template` (nahrazující FileTemplate a zajišťují kompatibilitu) a továrnu `TemplateFactory`, která rozšiřuje možnosti, jak v presenterech a komponentách pracovat se šablonami.


Ostatní
-------
Třídy `Nette\ArrayHash`, `ArrayList`, `DateTime`, `Image` a `ObjectMixin` jsou nyní součástí balíčku `Utils`, proto i jejich namespace byl změněn z `Nette` na `Nette\Utils`.  Obdobně `Nette\Utils\Neon` se stalo součástí balíčku `Neon` a bude mít namespace `Nette\Neon\Neon`.  Aby změna byla transparentní, vytváří se pro tyto a některé další třídy tiše aliasy. Aliasy ostatních tříd vytváří Nette Loader spuštěný v `loader.php` a vypisuje přitom varování (abyste mohli svůj kód upravit).

Zavržena (tj. stále funguje, jen vyhodí E_USER_DEPRECATED) je třída `Nette\Utils\MimeTypeDetector`, která od PHP 5.3 není potřeba, neboť ji plně nahrazuje rozšíření "Fileinfo":https://www.php.net/manual/en/book.fileinfo.php (pod Windows jej nezapomeňte zapnout v php.ini).

Byla zrušena podpora anotace `@serializationVersion` a dohledávání tříd pro vlastní anotace - tyto věci nebyly známé ani používané, ale měly negativní vliv na výkon.

A nakonec, chybné odkazy v šabloně nyní začínají hashem, tj. místo `error:...` se vypisuje `#error:`, aby když na takový odkaz omylem kliknete, browser nevypsal strašidelnou hlášku. Upravte si proto "CSS":https://github.com/nette/sandbox/commit/ac7a0fd2d707160426ab184442b8d68c590f8de2#diff-2.


Novinky
-------

Formuláře nyní přenášejí parametr `do` v POST datech, takže nebude strašit v URL. Přibyly nové validátory `Form::MIN` a `Form::MAX`. A do funkcí obsluhující událost `onSuccess` se nyní jako druhý parametr předávají hodnoty formuláře, takže ušetříte psaní `$values = $form->getValues()`.

V databázi přibyla nová funkce fetchAssoc(). Můžete se podívat na pár "příkladů použití":https://github.com/nette/utils/blob/master/tests/Utils/Arrays.associate().phpt v testech.

Anotace `@inject` nyní respektují aliasy definované pomocí `use`.

Pokud do `data-` atributů třídy Html vložíte pole, bude se serializovat do JSONu.

A přibyla nová třída `Nette\Security\Passwords`, která řeší hashování hesel (vyžaduje minimálně PHP 5.3.7).

V souboru `config.neon` můžete jednotlivým uživatelů definovat také jejich role:

```neon
nette:
	security:
		users:
			john:
				password: **********
				roles:
					- manager
					- reporter
```

{{priority: -5}}

Přechod na verzi 2.2

Verze 2.2 přichází s úplně novou infrastrukturou. Původní repozitář Nette byl rozdělen do nových samostatných komponent.

Nette bylo rozděleno do samostatných komponent Application, Bootstrap, Caching, ComponentModel, Nette Database, DI, Finder, Forms, Http, Latte, Mail, Neon, PhpGenerator, Reflection, RobotLoader, SafeStream, Security, Tokenizer, Tracy a Utils. Každá komponenta má vlastní repozitář, issue tracker a číslování verzí.

Stále si však můžete stáhnout celý framework nebo jej nainstalovat pomocí Composeru příkazem composer require nette/nette.

Tracy

Laděnka byla přejmenována na Tracy, místo názvu Nette\Diagnostics\Debugger se tedy používá Tracy\Debugger. Původní třída je z důvodu zpětné kompatibility stále funkční.

Pokud píšete doplňky, prefix názvů CSS tříd se změnil z nette- na tracy- a třída nette-toggle-collapsed na dvojici tracy-toggle tracy-collapsed. Původní třídy jsou u starých doplňku změněny na nové automaticky.

Latte

Šablonovací systém byl vždy poměrně úzce provázán s dalšími částmi frameworku, zejména třídami z jmenného prostoru Nette\Templating. Aby bylo Latte samostatně použitelné, bylo potřeba mu vymyslet nové snadno použitelné API, které se obejde bez těchto pomocných tříd. A vypadá takto:

$latte = new Latte\Engine; // nikoliv Nette\Latte\Engine
$latte->setTempDirectory('/path/to/cache');

$latte->addFilter('money', function ($val) { return /* ... */; }); // dříve registerHelper()

$latte->onCompile[] = function ($latte) {
	$latte->addMacro(/* ... */); // when you want add some own macros, see http://goo.gl/d5A1u2
};

$latte->render('template.latte', $parameters);
// or $html = $latte->renderToString('template.latte', $parameters);

Jak vidíte, Latte si řeší samo načítání šablon a jejich kešování, čímž pádem původní FileTemplate a vlastně celý Nette\Templating z velké míry pozbývá na smyslu existence. Tyto třídy i nadále fungují a snaží se zajistit kompatibilitu s novým Latte, nicméně jsou zavržené. Ze stejného důvodu jsou zavržené i třídy Nette\Utils\LimitedScope, Nette\Caching\Storages\PhpFileStorage a služba templateCacheStorage.

Naopak Application přináší vlastní třídu Template (nahrazující FileTemplate a zajišťují kompatibilitu) a továrnu TemplateFactory, která rozšiřuje možnosti, jak v presenterech a komponentách pracovat se šablonami.

Ostatní

Třídy Nette\ArrayHash, ArrayList, DateTime, Image a ObjectMixin jsou nyní součástí balíčku Utils, proto i jejich namespace byl změněn z Nette na Nette\Utils. Obdobně Nette\Utils\Neon se stalo součástí balíčku Neon a bude mít namespace Nette\Neon\Neon. Aby změna byla transparentní, vytváří se pro tyto a některé další třídy tiše aliasy. Aliasy ostatních tříd vytváří Nette Loader spuštěný v loader.php a vypisuje přitom varování (abyste mohli svůj kód upravit).

Zavržena (tj. stále funguje, jen vyhodí E_USER_DEPRECATED) je třída Nette\Utils\MimeTypeDetector, která od PHP 5.3 není potřeba, neboť ji plně nahrazuje rozšíření Fileinfo (pod Windows jej nezapomeňte zapnout v php.ini).

Byla zrušena podpora anotace @serializationVersion a dohledávání tříd pro vlastní anotace – tyto věci nebyly známé ani používané, ale měly negativní vliv na výkon.

A nakonec, chybné odkazy v šabloně nyní začínají hashem, tj. místo error:... se vypisuje #error:, aby když na takový odkaz omylem kliknete, browser nevypsal strašidelnou hlášku. Upravte si proto CSS.

Novinky

Formuláře nyní přenášejí parametr do v POST datech, takže nebude strašit v URL. Přibyly nové validátory Form::MIN a Form::MAX. A do funkcí obsluhující událost onSuccess se nyní jako druhý parametr předávají hodnoty formuláře, takže ušetříte psaní $values = $form->getValues().

V databázi přibyla nová funkce fetchAssoc(). Můžete se podívat na pár příkladů použití v testech.

Anotace @inject nyní respektují aliasy definované pomocí use.

Pokud do data- atributů třídy Html vložíte pole, bude se serializovat do JSONu.

A přibyla nová třída Nette\Security\Passwords, která řeší hashování hesel (vyžaduje minimálně PHP 5.3.7).

V souboru config.neon můžete jednotlivým uživatelů definovat také jejich role:

nette:
	security:
		users:
			john:
				password: **********
				roles:
					- manager
					- reporter