Nastavení 1. výchozí proměnné z config.neon a 2. výchozí proměnné přímo z definice rozhraní továrny komponenty

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

Ahoj,
snažím se testovat co vše nastavit komponentě a zasekl jsem se na tom, když chci komponentě nastavit jeden parametr s výchozí hodnotou z config.neon a druhý parametr s výchozí hodnotou přímo v definici interface té komponenty.

Toto kombinované nastavení dvou argumentů továrny mi nejde a nevím si s tím vůbec rady.

Ukázka komponenty TestForm:

namespace App\Component;

class TestForm extends \Nette\Application\UI\Control
{
	public function __construct($first, $second)
	{
		parent::__construct();
	}
}

interface ITestFormFactory {

	/** @return TestForm */
	function create($second = 'druhy');
}

Ukázka config.neon

parameters:
	firstValue: 'prvni'

services:
	- implement: App\Component\ITestFormFactory
	  create: App\Component\TestForm
	  parameters: [first: %firstValue%]
	  arguments: [first: %first%]

Výsledek chyby:

Nette\DI\ServiceCreationException
Service '87': Parameter $second in App\Component\TestForm::__construct() has no class type hint or default value, so its value must be specified.

Zkoušel jsem různé pokusy, prostě abych měl jednu nastavenou proměnnou z config.neon s výchozí hodnotou a druhou s výchozí hodnotou přímo v definici té kompomenty v PHP, tak se mi to nedaří.

Třeba to nejde a mě nedochází proč.

Pokud ale nastavím přímo v konstruktoru kompomenty hodnotu $second:

public function __construct($first, $second = NULL)
{
}

tak to chybu už nevyhodí, ale v containeru se ta druhá hodnota $second do metody „create“ ani constructoru třídy TestForm nepřidala :(

Viz. ukázka containeru:

final class Container_bd871e16dc_App_Component_ITestFormFactoryImpl_87 implements App\Component\ITestFormFactory
{
	private $container;


	public function __construct(Container_bd871e16dc $container)
	{
		$this->container = $container;
	}


	public function create($first = 'prvni'): App\Component\TestForm
	{
		$service = new App\Component\TestForm($first);
		return $service;
	}

}

Budu rád za všechny možné rady a snad to konečně pochopím. Předem všem díky.

Editoval freely111 (21. 10. 2016 18:06)