Vyšla nová verze Nette DI 3.2

David Grudl
Nette Core | 8215
+
+12
-

Vyšla nová verze Nette DI 3.2

novinky:

  • využití všech featur PHP 8.1 (typehinty, nové funkce, …)
  • ochrana citlivých údajů ve zdrojovém kódu v Tracy (ukázka)
  • search: přidána volba exclude > files
  • podpora pro first-class callable syntax v NEONu (např. @user::logout(...))
  • stručnější zápis vícenásobných továren (issue)

změny:

  • generované továrničky a accessory vyžadují v rozhraní u metody create()/get() uvést nativní typehint (místo zastaralé phpDoc anotace)
  • nikdy nedokumentovaný parameter %parameters% je deprecated
  • varuje, pokud při kompilaci dochází k serializování objektů
Miellap
Člen | 12
+
0
-

Plánuje se u tohoto zápisu vícenásobných továren i podpora dekorátoru?

Sniclman
Člen | 15
+
0
-

Ve verzi 3.1 fungovaly „dynamické“ vícenásobné továrny. Ve verzi 3.2 toto již není možné.

Toto fungovalo ve verzi 3.1

interface VicenasobnaTovarna
{
	public function create($nazevTovarny): AbstraktniTrida;
}

Musel jem provést náhradu metody create za get. Nicméně to není stav, který bych chtěl, protože metoda get vrací vždy stejnou instanci. Potřeboval bych vždy novou instanci tak jak to bylo u metody create (každá instance může mít vlastní konfiguraci).

Definovat metody create<name>() v mém případě nelze. Třídy, které dědí AbstraktniTrida přidávám formou pluginu a registruji pomocí vloženého (include) NEONu.

Bude metoda v následující verzi opět k dispozici create($name)? Případně je k tomu jiný postup?

David Grudl
Nette Core | 8215
+
+2
-

@Sniclman vrátil jsem to v 3.2.x-dev zpátky

Sniclman
Člen | 15
+
0
-

David Grudl napsal(a):

@Sniclman vrátil jsem to v 3.2.x-dev zpátky

Super, děkuji.

Bylo by možné odstranit chybovou hlášku nette\di\src\DI\Definitions\LocatorDefinition.php:56 nebo upravit podmínky?

trigger_error(sprintf("Service '%s': Method %s::create(\$name) is deprecated, use createFoo().", $this->getName(), $interface), E_USER_DEPRECATED);

Při každém generování DI musím kliknout v Tracy na „skip error“ aby se DI vygenerovalo. Pak už to jede v pohodě.