Vložení rohraní do konstruktoru komponenty

před 5 měsíci

Jarek92
Člen | 89
+
0
-

Ahoj, mám entitu, která vypisuje v tabulce záznamy z DB. u každého řádku v tabulce mám handle, který provede určitou operaci. K této operaci však potřebuju vložit přes konstruktor třídu, která se může v závislosti na použití měnit. Tak jsem zvolil rozhraní. nicméně po spuštění aplikace mi Nette vyhodí následující chybu:

Nette\DI\ServiceCreationException
Unused parameter $change when implementing method App\Components\Grids\IBuildSaveGridFactory::create()

Presenter:

protected function createComponentBuildSaveGrid() {
    $grid = $this->buildSaveGridFactory->create($this->buildSaves, $this->change); // $this->change je objekt implementující rozhraní IChange
    return $grid;
}

Komponenta BuildSaveGrid:

public function __construct(array $buildSaves, IChange $change) {
    parent::__construct();
    $this->change = $change;
    $this->setBuildSaves($buildSaves);
}

Rohraní IChange:

interface IChange {

    public function doIt(int $id);
}

config.neon:

services:
    - App\Model\Services\IChange

Ví někdo prosím, proč k té chybě dochází?

Editoval Jarek92 (13. 2. 19:17)

před 5 měsíci

CZechBoY
Člen | 3048
+
0
-

Těžko říct, když si neposlal App\Components\Grids\IBuildSaveGridFactory::create()

před 5 měsíci

Jarek92
Člen | 89
+
0
-

Aha, zapomněl jsem, omlouvám se.

interface IBuildSaveGridFactory {

    /**
     * @return BuildSaveGrid
     */
    public function create(array $buildSaves, IChange $change);
}

před 5 měsíci

David Matějka
Moderator | 5519
+
+2
-

chyba je divna, ale proc mas registrovany to IChange jako sluzbu a presto to predavas rucne z presenteru?

před 5 měsíci

Jarek92
Člen | 89
+
0
-

Rozhraní IChange jsem z config.neon odstranil, chyba však stále přetrvává.

před 5 měsíci

David Matějka
Moderator | 5519
+
0
-

jak registrujes IBuildSaveGridFactory v configu?

před 5 měsíci

Jarek92
Člen | 89
+
0
-

Takto:

services:
        - App\Components\Grids\IBuildSaveGridFactory