Pojďme otestovat nette/application 3.1

před 11 dny

David Grudl
Nette Core | 6985
+
+19
-

Poprosil bych o testování nette/application 3.1.0-RC, která přináší několik novinek důležitých pro typované šablony.

Přes všechny změny v šablonách by nemělo dojít k žádnému porušení zpětné kompatibility. Ale samozřejmě je to potřeba ověřit, obzvlášť pokud nakládáte se šablonou pro mě nečekaným způsobem.

Hlavní změny u šablon:

  • Nette\Bridges\ApplicationLatte\Template přestává používat magické settery a gettery, takže obvyklý zápis $template->val = $var je skutečným zápisem do proměnné objektu $template, což přinese i malé zrychlení (mnoho uživatelů nejspíš ani netušilo, že se tam používaly magické settery a gettery)
  • createTemplate() v Presenter a Control skrze TemplateFactory nyní nevyrábějí Template, ale buď jejího potomka a novou třídu DefaultTemplate
  • …nebo pokud existuje třída pojmenovaná stejně jako presenter či control, jen místo koncovky Presenter/Control končící na Template, vyrobí objekt této třídy
  • zároveň createTemplate() přijímá volitelný parametr kterým lze přímo říct, jakou třídu má vyrobit. Abych skutečně předešel porušení zpětné kompatibility, je tento parametr zatím skrytý
  • Presenter::sendTemplate() přijímá volitelný parameter $template, můžete tedy odeslat jakoukoliv šablonu, třeba tu, kterou si vytvoříte pomocí createTemplate()

Deprecated stuff:

  • Template::__toString() je deprecated ve prospěch renderToString(), jeho účel pradávno převzaly bloky v Latte
  • Presenter::getContext() také vyhazuje deprecation notice. Je na čase tento krok udělat. Pokud DI kontejner v presenterech používáte a není snadné se ho zbavit, nevadí, předejte si jej konstruktorem nebo proměnnou s anotací inject a používejte nadále (klidně si přepište metodu getContext). Jde o to, aby se ho zbavil samotný UI\Presenter.
  • RouteList: deprecated jsou rozhraní Countable and IteratorAggregate, nahrazuje je metoda getRouters()
  • RouteList a SimpleRouter mají deprecated flagy. Dnes existuje jen flag ONE_WAY. Nelekejte se, vypadá to jako zásadní změna, ale ve skutečnosti jde o to, že k velkému posunu routování došlo ve verzi Nette 3.0, ve které se routy flagují trošku jinak a tohle je krůček v postupném přesunu k modernímu způsobu a úprava by měla být triviální.

Prosím tedy o otestování, ať může v brzké době vyjít a vývoj se posune dál směrem k šablonám testovaným pomocí PHPStanu.

před 10 dny

David Grudl
Nette Core | 6985
+
+1
-

Někdo se zmiňoval, že (string) $template používá (asi v souvislosti s tvorbou emailů). Pokud je to používané, tak bych stav deprecated zrušil.

před 10 dny

enumag
Člen | 2129
+
0
-

Dovolím si menší rýpnutí. Něco velmi podobného typovaným šablonám používám v Nette i Symfony už dávno (dávám tomu koncovku View). Ale proč by tenhle value objekt měl dědit Nette\Bridges\ApplicationLatte\Template, to mi tedy do hlavy nejde. :-) Imo by Template měla být final a custom View objekt by mela byt jedna z promennych.

před 10 dny

David Grudl
Nette Core | 6985
+
0
-

Rýpat snad není potřeba, pokládat otázky je zcela ok. Dědit od té třídy se samozřejmě nemusí. Hledal jsem, jak jsi na to narazil, jde asi o formulaci z odkazovaného vlákna? To bylo myšleno jinak, v návaznosti na update, upravím to.

před 10 dny

ppar
Backer | 288
+
0
-

Ahoj, stále 3.1.0-RC obsahuje bug https://github.com/…n/issues/253 , tato chyba se týká i v3.0.4.

před 10 dny

enumag
Člen | 2129
+
0
-

Přesně tak, v odkazovaném vláknu je všude class ArticleTemplate extends Nette\Bridges\ApplicationLatte\Template. Pokud ten objekt nemusí nic dědit ani implementovat tak máš palec nahoru. ;-)

před 10 dny

David Grudl
Nette Core | 6985
+
0
-

Musí implementovat Nette\Application\UI\ITemplate. Dědit nemusí, ale pokud chceš používat metody jako $template->addFilter() atd, tak si je pak musíš dopsat.

před 7 dny

Tomáš Jacík
Člen | 144
+
0
-

Zatím jsem to zkoušel jen zběžně v mý nejsložitější appce a zdá se, že je všechno ok. Budu ještě zkoušet. Co jsem dneska z toho PoSobota streamu nepochopil je ta DefaultTemplate, můžeš to prosím nějak osvětlit, jak donutit appku, aby použila tu DefaultTemplate, když nemám vytvořenu speciální třídu pro presenter?

před 7 dny

Šaman
Člen | 2403
+
+2
-

Tomáš Jacík: Já to pochopil tak, že se použije DefaultTemplate vždy, když apliaci nedonutíš použít něco jiného.
Dnešní přednášky mě taky navnadily, jdu to zkusit na aktuální aplikaci.

před 4 dny

Ages
Člen | 87
+
0
-

Chtěl jsem vytvořit BaseTemplate, kterou bych použil jako rodiče a nemohl jsem přijít na to proč mi nefungují kontroly proměnných, až jsem nakonec zjistil, že tato třída nemůže být abstract.
Je toto chování správné?

// Toto nefunguje
abstract class BaseTemplate extends Template
{
	//...
}
// Toto funguje
class BaseTemplate extends Template
{
	//...
}

Editoval Ages (1. 4. 10:09)

před 4 dny

Ages
Člen | 87
+
0
-

Pokusil jsem se to ještě jednou vrátit na abstract a nyní to již kontroluje i s abstract.
Popravdě nerozumím tomu, kde mohlo dojít k problému, nic jiného jsem neupravil.

před 4 dny

CZechBoY
Člen | 3494
+
0
-

@Ages Nejspíš ti chyběla implementace pro konkrétní template.

před 4 dny

Ages
Člen | 87
+
0
-

@CZechBoY právě že ne :(, pokud by se mi to ještě stalo tak dám vědět.