„Multiple services of type …“ pri pokuse o extend Modelu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Thommas2316
Člen | 6
+
0
-

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

Nevyzadujes nekde jako zavislost ModelConfig?

Thommas2316
Člen | 6
+
0
-

Neviem úplne presne, čo pod tým myslíš …

David Matějka
Moderator | 6445
+
0
-

Jestli nemas nekde v presenteru jako zavislost uvedenou tu rodicovskou tridu ModelConfig

Thommas2316
Člen | 6
+
0
-

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

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

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