povinný argument v automatiky generované factory

xeren_a6n
Člen | 3
+
0
-

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
+
0
-

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?

xeren_a6n
Člen | 3
+
0
-

Pokus přehodit je na začátek byl, ovšem taktéž nezafungoval.

David Grudl
Nette Core | 8082
+
0
-

@MarekBartoš mám za to, že to tam je

Marek Bartoš
Nette Blogger | 1146
+
0
-

@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ě

Martk
Člen | 651
+
+4
-

Vypadá to, že třídu DataSourceControl registruješ jako službu

xeren_a6n
Člen | 3
+
0
-

Martk napsal(a):

Vypadá to, že třídu DataSourceControl registruješ jako službu

Ahhh, dekuji mockrát, zkontroloval jsem to a zjistil jsem ze kolega omylem autowiruje i ji. Tím se problém vyřešil.