„Multiple services of type …“ pri pokuse o extend Modelu
- Thommas2316
- Člen | 6
Zdravím :)
Quick question – pokúšam sa extendovať „koreňový model“, pretože mám 5 premenných, ktoré potrebujem používať vo viacerých modeloch (počet cca 6) a nechcem ich všetky pridávať line by line v __startup BasePresenter-u.
Mám teda „ModelConfig“ a z neho extendujem 4 ďalšie modely.
Keď sa to však pokúsim spustiť, Tracy mi oznámi „Multiple services of type App\Model\ModelConfig found: inputsModel, guaranteedPrizesModel, quizQuestionModel, randomDrawModel“.
ModelConfig:
namespace App\Model;
class ModelConfig extends \Nette\Object
{
/** @var array */
public $week;
/** @var array */
public $langConfig;
/** @var string */
public $lang = 'en';
/** @var array */
public $l;
/** @var \Nette\Http\SessionSection */
public $userSession;
....
....
....
QuizQuestionModel (a rovnakým princípom všetky ostatné:
namespace App\Model\Mechanics;
class QuizQuestionModel extends \App\Model\ModelConfig
{
/** @var \Nette\Database\Context */
private $database;
/** @var array */
private $config;
/** @var \App\Model\UserModel */
private $userModel;
/** @var \App\Model\CodeModel */
private $codeModel;
/** @var \App\Model\PageModel */
private $pageModel;
/** @var \Nette\Security\User */
private $user;
public function __construct(\Nette\Database\Context $database, \Nette\DI\Container $container, \App\Model\UserModel $userModel, \App\Model\CodeModel $codeModel, \App\Model\PageModel $pageModel, \Nette\Security\User $user)
{
$this->database = $database;
$this->config = $container->parameters;
$this->userModel = $userModel;
$this->codeModel = $codeModel;
$this->pageModel = $pageModel;
$this->user = $user;
}
Je snáď to, o čo sa pokúšam blbosť, alebo existuje nejaký iný spôsob, aby som si nezahltil polovicu BasePresentru „len“ setupovaním premenných modelu ?
Ďakujem veľmi pekne za odpoveď :)
Have a nice day :)
- David Matějka
- Moderator | 6445
Jestli nemas nekde v presenteru jako zavislost uvedenou tu rodicovskou
tridu ModelConfig
- Thommas2316
- Člen | 6
Mám tam len
/**
* @inject
* @var Model\ModelConfig
*/
public $modelConfig;
Aby som do tých 5 premenných nalial dáta.
a v neone
services:
...
...
modelConfig: App\Model\ModelConfig
...
...
- David Matějka
- Moderator | 6445
Hm, to by ti stejne nefungovalo. Udelej radeji to, ze ty konkretni modelove tridy nebudou dedit od ModelConfig, ale vyzadaji ho jako zavislost.
- Thommas2316
- Člen | 6
To by teoreticky aj šlo, jediná issue, ktorú som práve zistil je, že autowiring prebehne skorej, ako naplním dáta v startupe, takže keď v __constructe jednotlivých tried zavolám
$this->langConfig = $modelConfig->langConfig;
$this->week = $modelConfig->week;
$this->lang = $modelConfig->lang;
pemenné obsahujú default values $modelconfig-u