povinný argument v automatiky generované factory
- xeren_a6n
- Člen | 3
Zdravím,
dnes jsem v práci vytvářel standartním způsobem komponentu s generovanou
factory přes interface. Componenta příjímá v contruktoru 5 služeb a
2 povinné argumenty v podobě integeru. Bohužel, při generování DI
obdržím hchybovou hlášku
Parameter $id_in in __construct() has no class type hint and no default value, so its value must be specified.
V dokumentaci (link)
je však případ, kde je posílán 1 povinný argument v podobě integeru
vyobrazen, ačkoliv má chybová hláška naznačuje, že musí mít buďto
výchozí hodnotu, nebo může příjmout jako paramter null
.
Ověřil jsem, že továrna je skutečně registrovaná v configu, a to
i všechny služby. Ověřil jsem, že return hodnota metody
create
je stejná jako třída, kterou tvoří. Je toto již
v nette zakázáno a dokumentace je zastaralá, nebo dělám něco
špatně?
Můj interface (factory):
interface IDataSourceFactory
{
/**
* @param int $id_in
* @param int $id_out
* @return DataSourceControl
*/
public function create(int $id_in, int $id_out): DataSourceControl;
}
Moje componenta:
class DataSourceControl extends Control
{
//privátní attributy
public function __construct(
Service1 $service1,
Service2 $service2,
Service3 $service3,
Service4 $service4,
Service5 $service5,
int $id_in,
int $id_out
) {
$this->service1 = $service1;
$this->service2 = $service2;
$this->service3 = $service3;
$this->service4 = $service4;
$this->service5 = $service5;
$this->id_in = $id_in;
$this->id_out = $id_out;
}
}
Aplikace běží na php 7.4 a Nette 3.1
Děkuji předem za odpovědi.
Editoval xeren_a6n (4. 5. 2021 15:54)
- Marek Bartoš
- Nette Blogger | 1146
Mělo by ti stačit přehodit argumenty, které se předávají z factory na začátek. Vypadá to, že se hledají podle pořadí a ne podle názvu.
@DavidGrudl Možná by stálo za zvážení podporovat provázání argumentů z konstruktoru a factory podle názvu a v budoucnu kód s neodpovídajícími názvy závisející na pořadí označit za deprecated?
- Marek Bartoš
- Nette Blogger | 1146
@xeren_a6n Zkus sem poslat ukázku, jak továrnu registruješ v configu a nahrát někam redscreen k proklikání, takto těžko říct, co je špatně