Přechod na verzi 2.4
Minimální požadovaná verze PHP je 5.6 (pro Latte a Tracy 5.4).
Verzí Nette 2.4 se rozumí, že máte tyto balíčky nainstalované ve verzi 2.4.*:
"require": {
"nette/application": "2.4.*",
"nette/bootstrap": "2.4.*",
"nette/di": "2.4.*",
"nette/forms": "2.4.*",
"nette/http": "2.4.*",
"nette/security": "2.4.*",
},
Pozor: u ostatních balíčků nainstalujte nejnovější verzi, kterou vám dovolí Composer! Mohou mít totiž jiné
verzování. Zkuste uvést "*"
a podívejte se, jakou verzi Composer nainstaluje.
Deprecated
Před testováním nebo nasazováním doporučujeme nejprve vypnout hlášení chyb E_USER_DEPRECATED
a povolit
jej, až když vše bude fungovat:
$configurator->enableDebugger();
error_reporting(~E_USER_DEPRECATED); // note ~ before E_USER_DEPRECATED
Nette\SmartObject
Třídy frameworku teď místo dědění od Nette\Object
používají novou traitu Nette\SmartObject
,
která se liší v několika věcech:
- podporuje „emulované properties“ jen pokud je na třídě zapsaná anotace
@property typ $nazev
- nepodporuje „extension methods“
- nepodporuje „getReflection“
- nepodporuje získávání metod jako
$this->formSubmitted
(je třeba nahradit za klasický PHP callback[$this, 'formSubmitted']
Použití těchto vlastností generuje E_USER_DEPRECATED a v příští verzi bude odstraněno.
Latte
Latte generuje upozornění, pokud:
- konstrukcí
{foreach $langs as $lang}
přepíšete parameter šablony$lang
- použijete již zastaralou vykřičníkovou konvenci
{!$name}
namísto{$name|noescape}
- použijete v šabloně
<?php ?>
nebo{? ...}
namísto{php ...}
- použijete u bloku či include filtr, který je pro jiný content type (vysvětlení)
- použijete
|nosafeurl
místo novějšího|nocheck
- použijete makro
{includeblock}
, které nahrazuje podobné makro{import}
(importuje jen bloky a ne obsah okolo) - dojde k chybě „Incompatible context“ při používání bloků v jiném kontextu (například uvnitř HTML atributu bez uvozovek), než v jakém byl definován (například v běžném HTML textu)
- přistupujete k proměnné $template kvůli volání filtrů, což nahraďte za
($var|trim)
- přistupujete k proměnné $template kvůli proměnné, což nahraďte za
$this->getParameter('xyz')
- přistupujete k interní podtržítkové proměnné jako
$_control
,$_form
atd.
Bootstrap a DI
- sekce (production, development) v jednom konfiguračním souboru, použijte dvojici konfiguračních souborů config.neon a config.local.neon
- dědičnost služeb
- Statement::setEntity()
Další
- Negativní validační pravidla. Alternativou
~Form::FILLED
jeForm::BLANK
, nebo~Form::EQUAL
můžete nahradit zaForm::NOT_EQUAL
. Nette\Utils\Html::add()
se mění naaddHtml()
resp.addText()
.- V PhpGenerator metody
setDocuments(), getDocuments() a addDocument()
nahradily obdobnésetComment(), getComment() a addComment()
. - Flag
Route::SECURED
aRoute::$defaultFlags
jsou deprecated.
Změny
Application
Route i SimpleRouter nyní generují v URL stejné HTTP/HTTPS schéma, s jakým se přistupuje ke stránce. Routy, které
vyžadují určitý protokol, se dají napsat se schématem např. Route('http://domain.cz/<presenter>')
.
U parametrů typu bool použitých v render/action metodách (tj. s výchozí hodnotou true nebo false) a persistentních parametrech se nyní rozlišuje mezi false a null, tj. pokud parametr v URL není uveden, jeho hodnota je nyní null, dříve byla false. Viz nette/application#107.
Třída, kterou vrací Presenter::getReflection()
, již není potomkem Nette\Reflection\ClassType
a
taktéž getReflection()->getMethod()
není potomkem Nette\Reflection\Method
. Metody
hasAnnotation
a getAnnotation
neparsují text uvedený za názvem anotace, jako např. abc
v @param abc
, parsuje totiž jen text uvedený v závorkách @param(abc)
.
Formuláře
Pokud má prvek nastaveno nějaké pravidlo addRule()
(tedy je efektivně povinný), musíte jej také označit
jako povinný pomocí setRequired()
. Dále setRequired(false)
nyní udělá prvek volitelný, tj. pokud
není vyplněn, neaplikují se validační pravidla. Lze tím nahradit větve addCondition($form::FILLED)
.
Už se nepoužívá interní proměnná $_form
, kterou někdy bylo potřeba ručně předávat do inkludovaných
šablon, což už není potřeba, nebo kvůli snippetům uvnitř formulářů, což nyní povede k chybě (např.
end() expects parameter 1 to be array, null given
). Pokud si kvůli snippetům předáváte do šablony
$template->_form = $form
, můžete to nahradit za
$template->getLatte()->addProvider('formsStack', [$form])
, nicméně jde stále jen o obezličku, korektní je
použít {snippetArea xyz}
a ten invalidovat společně se snippetem.
Validátory Form::EMAIL
, URL
, INTEGER
automaticky mění HTML atribut type na
email
, url
resp. number
.
Interní parametr do
se nyní u formulářů posílaných přes POST jmenuje _do
, aby nedocházelo
ke kolizi, a zároveň by nemělo docházet k mixováním formulářových prvků s persistentními parametry.
Třída BaseControl už přímo definuje getControlPart() a getLabelPart() a standardně vracejí totéž, co getControl() a
getLabel(). Makra <tag n:name>
už rovnou používají tyto -part metody.
DefaultFormRenderer nyní správně vkládá do skupiny i vnořené komponenty (dříve se vnořené komponenty vykreslily až na konci formuláře), viz nette/forms#96.
Pokud používáte vlastní TemplateFactory, aplikujte do ní změny vytvořené v originální továrně.
Nezapomeňte zaktualizovat netteForms.js.
Latte
Filtry, které mají být aplikovány na blok textu ({block}
nebo {_}...{/_}
) či
{include}
, musejí jako první parametr přijímat objekt Latte\Runtime\FilterInfo, viz příklad.
Makro {contentType}
je povolené pouze v hlavičce šablony a v elementu <script>
kvůli
nette/latte#71.
Caching
Odstraněna třída Nette\Caching\Storages\FileJournal
.