Nastavení 1. výchozí proměnné z config.neon a 2. výchozí proměnné přímo z definice rozhraní továrny komponenty
- freely111
- Člen | 41
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)