Třída na úpravu dat z databáze
- Ages
- Člen | 128
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
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;
}
...
}
?>