Vyšla nová verze Nette DI 3.2

- David Grudl
- Nette Core | 8285
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ů

- Sniclman
- Člen | 15
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?

- Sniclman
- Člen | 15
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ě.