Chystá se nette/application 3.3, prosím o otestování
- David Grudl
- founder | 8315
Poprosil bych o testování nette/application 3.3.0-RC. Než ji vydám jako stabilní, rád bych si ověřil, že přechod proběhne hladce. Verze přináší modernizaci požadavků, spolehlivější ochranu proti CSRF, pár drobných BC breaků a zároveň deprecuje řadu hodně zastaralých konstrukcí.
Vyžaduje PHP 8.3.
Spolehlivější ochrana proti CSRF
Ochrana nově ověřuje, že požadavek přišel ze stejného originu,
pomocí prohlížečové hlavičky Sec-Fetch-Site, kterou posílá
sám prohlížeč, místo dřívějšího spoléhání na vlastní SameSite
cookie. Je tak bezstavová (nepotřebuje cookie) a funguje spolehlivě
i v prohlížečích, kde se SameSite cookie chovaly nespolehlivě. Navíc se
kontroluje shoda celého originu (schéma, doména i port), což je
přísnější než dřívější same-site, které tolerovalo subdomény.
Souvislosti popisuje článek na
blogu.
Týká se to automaticky chráněných signálů ve formulářích
i atributu #[Requires(sameOrigin: true)]. Jediný praktický
dopad: přímé otevření odkazu na signál (záložka, odkaz v e-mailu) už
neplatí za same-origin. Pokud to někde potřebujete povolit, použijte
#[Requires(sameOrigin: false)].
Další novinky
- Výchozí mapování je nově
App\Presentation\*\**Presenter(místo prastarého*Module\*Presenter). Kdo mámappingnakonfigurovaný explicitně (všichni), nic neřeší. Konečně bez konfigurace odpovídá výchozí struktuře popsané všude v dokumentaci, tedy např.app/Presentation/Home/HomePresenter.php. - Fragment URL přes klíč
#v argumentech:link('Product:detail', ['#' => 'reviews'])vygeneruje fragment...#reviews. Hodnota se enkóduje. Presenter::completeTemplate()– nováprotectedmetoda vyčleněná zesendTemplate(). Lze ji přepsat a doplnit do šablony společné proměnné nebo nastavit soubor.
@anotace nahrazují atributy
Je čas dát sbohem @anotacím, tato verze vás upozorní pomocí deprecation notice, že je máte nahradit za atributy:
@persistent→#[Nette\Application\Attributes\Persistent]@crossOrigin→#[Nette\Application\Attributes\Requires(sameOrigin: false)]@deprecated→#[Nette\Application\Attributes\Deprecated]
Application::processRequest() vrací Response
Metoda už odpověď sama neodesílá, ale vrací ji. Odeslání řeší až
run(). Motivací je snazší použití v long-running
prostředích (RoadRunner, FrankenPHP), integrace PSR a možnost rozšiřovat
Application bez kopírování kódu (viz issue #348). Pokud
processRequest() voláte ručně, je potřeba si vrácenou
odpověď poslat sami:
$response = $application->processRequest($request);
$response->send($httpRequest, $httpResponse);
LatteFactory::create() přebírá ?Control
Toto je BC break v interface LatteFactory. Signatura je nově
create(?Control $control = null). Dotkne se toho, kdo má vlastní
implementaci LatteFactory.
Deprecate starých raritek
Prastaré sestavování routeru polem:
$router[] = new Route('...'); // deprecated
$router->addRoute('...'); // správně
- query string v cíli odkazu, např.
n:href="Product:detail?x=1&y=2". Správně se argumenty předávají jako:n:href="Product:detail, x: 1, y: 2". - přístup k některým magickým vlastnostem
(
$presenter->view,$layout,$request,$session…) je označen jako zastaralý ve prospěch getterů. - odstraněn druhý parametr
$defaultuComponent::getParameter() - odstraněn tag
{ifCurrent}– používejte{if isLinkCurrent('...')}. - odstraněna podpora Latte 2 (vyžaduje Latte 3.1)
- odstraněna kompatibilita se starými názvy tříd
(
PresenterComponent,IRouterapod.).
Díky předem za otestování i zpětnou vazbu.