Vyšla nová verze Nette DI 3.2
- David Grudl
- Nette Core | 8215
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ě.