Vlastní extension na dev verzi – Nette\DI\ServiceCreationException

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

Stále to na mne řve:

Service 'googleComponent': Parameter $parameters in Utils\GoogleComponent::setParameters() has no type hint, so its value must be specified.

Přitom v dané třídě mám:

/**
 * @var array
 */
private $parameters;

/**
 * Set parameters
 *
 * @param array
 */
public function setParameters($parameters)
{
	$this->parameters = $parameters;
}

Zkusil jsem i toto, ale nic to nezměnilo:

/** @var array */
private $parameters;

Nevíte někdo, jak vyřešit tento problém?

norbe
Backer | 405
+
0
-

Ukaž spíš kód té tvojí extensiony. Nejspíš voláš metodu setParameters a nepředáváš jí parametry, takže se je nette snaží doplnit automaticky, ale nemá k tomu potřebné údaje…

MartinitCZ
Člen | 580
+
0
-

@**norbe**: Předávám, jelikož v 2.0.10 to bylo bez problémů. Akorát jsem obalil proměnné %var% do $builder->expand(%var%)

norbe
Backer | 405
+
0
-

Když neukážeš kód té extension tak těžko radit…

MartinitCZ
Člen | 580
+
0
-

@**norbe**: Ok. Tady je její obsah. Třída, které dědí od \Nette\Config\CompilerExtension.

public function loadConfiguration()
{
	$builder = $this->getContainerBuilder();
	$config = $this->getConfig();

	$builder->addDefinition('googleComponent')
				->setClass('Utils\GoogleComponent')
					->addSetup('setParameters', $builder->expand("%cms.google%"));
}

Editoval martinit (16. 4. 2013 16:08)

norbe
Backer | 405
+
0
-

Nezkoušel jsem, ale neměli by ty parametry být obalené v poli?

$builder->addDefinition('googleComponent')
            ->setClass('Utils\GoogleComponent')
                ->addSetup('setParameters', array($builder->expand("%cms.google%")));
Majkl578
Moderator | 1364
+
0
-

norbe napsal(a):

Nezkoušel jsem, ale neměli by ty parametry být obalené v poli?

*neměly. A ne.

enumag
Člen | 2118
+
0
-

Jo tuhle výjimku to po mě taky párkrát hodilo i když jsem value specifikoval (podobně jako výše). Bohužel si už nepamatuji v čem byl problém. Každopádně ta výjimka je dle mého názoru přinejmenším matoucí.

Editoval enumag (16. 4. 2013 22:53)

castamir
Člen | 629
+
0
-

napadá mě taková blbost, ale myslim, ze ma cenu to vyzkouset ;)

/**
 * Set parameters
 *
 * @param array $parameters
 */
public function setParameters($parameters)
{
    $this->parameters = $parameters;
}
MartinitCZ
Člen | 580
+
0
-

@**enumag**: To mi moc nepomůže ;)

@**castamir**: Vyzkoušeno, ale problém přetrvává.

enumag
Člen | 2118
+
0
-

@martinit: Jasně, já jen že až na to přijdeš tak to chce lépe zanalyzovat a nejspíš i změnit text té výjimky nebo něco. Doufám že to tu nezapadne bez řešení.

MartinitCZ
Člen | 580
+
0
-

@**enumag**: Byl bych rád, kdyby se to vyřešilo. Záhadou je mi to, že mám v podstatě úplně stejnou třídu (jen jiné jméno), taky nastavenou přes extension, a tu to veme v pohodě.

enumag
Člen | 2118
+
0
-

@martinit: Teď jsem si vzpomněl – mohlo by pomoct tohle:

$builder->addDefinition('googleComponent')
            ->setClass('Utils\GoogleComponent')
                ->addSetup('setParameters', array('parameters' => $builder->expand("%cms.google%")));
MartinitCZ
Člen | 580
+
0
-

@**enumag**: Toto pomohlo, ale přijde mi to dost divné. Když zamouřim obě oči, tak minimálně zahlášená chyba.
Nebudem troškaři … je to celé divné. Jednou stačí, a funguje, $builder->expand("%cms.google%"), jindy musím použít array('parameters' => $builder->expand("%cms.google%")).
Pokud je to nějaký bug, tak by bylo dobré to ještě do 2.1 procpat. :)

EDIT: Na něco jsem přišel. Zmíněný hack od enumag se musí použít tehdy, jeli „%cms.google%“ array pole. Pokud jde o string, tak není problém.

Editoval martinit (17. 4. 2013 20:08)

enumag
Člen | 2118
+
0
-

@martinit: Hodně zvláštní. Taky se mi to vůbec nelíbí, můžeš založit issue na GitHubu s odkazem na toto téma? Tohle by se mělo nějak vyřešit, možná i se změnou API.

MartinitCZ
Člen | 580
+
0
-

@**enumag**: V tomto nepomůžu. Github nemám, takže ani issues nezvládnu. :/ Sry.

enumag
Člen | 2118
+
0
-

@martinit: oki, issue jsem založil

MartinitCZ
Člen | 580
+
0
-

@**enumag**: Rozumim.
Možná se to trochu protáhne.
Chtěl jsem Davidovi tento problém replikovat na Nette sandbox, ale tam se toto nestalo.
Zatím zjištuji co kde je špatně ;)

MartinitCZ
Člen | 580
+
0
-

Zatim se mi to nedaří najít.

Zjistil jsem, že tété verzi se daný problém nevyskytuje:
https://api.github.com/…5cffe8d93203

Aktuálně to vimdím tak, že problém vznikl díky commitu:
https://github.com/…46e0d3fb3d1f

EDIT: Fix link

Editoval martinit (20. 4. 2013 13:36)

enumag
Člen | 2118
+
0
-

Odkaz na ten commit mi hází 404.