Třída na úpravu dat z databáze

Ages
Člen | 128
+
0
-

Zdravím,
snažím se udělat třídu na ve které bych si k produktu vypočítal cenu pro daného uživatele, ale když se do ní snažím předat data tak mi laděnka vyhazuje:
Service of type App\Model\RowWrapp: Service of type Nette\Database\Table\ActiveRow needed by $row in __construct() not found. Did you register it in configuration file?

Nevíte náhodou co jsem opomněl?

declare(strict_types=1);

namespace App\Model;

final class RowWrapp
{

    use \Nette\SmartObject;

    public $row;
    protected $data;

    public function __construct(\Nette\Database\Table\ActiveRow $row) {
        $this->row = $row;
    }
	...
}
artemevsin
Člen | 61
+
+1
-

vypadá to, že třídu RowWrapp máš zaregistrovanou jako službu. Proto když se DI snaží vytvořit instanci této služby a nemůže najít všechny potřebné závislosti (tj. ActiveRow), tak to vyhodí tuto chybu. To že ActiveRow nemáš zaregistrovanou jako službu je správně – není to totiž služba :) Pak je ale otázka, jestli RowWrapp má být služba nebo ne. Pokud jejím účelem dopočítat cenu a tuto cenu nastavit zpátky do ActiveRow, tak je to služba. Pokud třídu RowWrapp používáš jako obálku, není to služba a nemá být zaregistrovaná jako služba.
Pokud to chceš mít jako službu, tak by to mohlo vypadat nějak takto:

<?php
declare(strict_types=1);

namespace App\Model;

final class RowWrapp
{

    use \Nette\SmartObject;

    protected $data;

	private $calculator;

	public function __construct(PriceCalculator $calculator)
	{
		$this->calculator = $calculator;
	}


    public function modify(\Nette\Database\Table\ActiveRow $row) {
        $row->price = $this->calculator->calculate($row); // výpočet ceny

		return $row;
    }
    ...
}
?>
Ages
Člen | 128
+
0
-

@artemevsin
Díky moc, už si sypu popel na hlavu :(

Ages
Člen | 128
+
0
-

V případě, že by to někdo chtěl zkopírovat ten kód, tak je potřeba upravit

public function modify(\Nette\Database\Table\ActiveRow $row) {
       $row->price = $this->calculator->calculate($row); // !!nelze zapisovat přímo do ActiveRow