Injectnutí služby do formulářového prvku

MikeLacroix
Člen | 60
+
0
-

Ahojte,

vytvářím trochu složitější vlastní formulářový prvek a potřeboval bych v něm použít model. Jak do něj mohu dostat nějaký repozitář? Prvek mám udělaný přes:

class PeopleSelect extends \Nette\Forms\Controls\BaseControl {...}

Nebo to mám udělat nějak úplně jinak?

Mistrfilda
Člen | 76
+
+2
-

Ahoj,

nikdy jsem prvek s modelem nepotřeboval/nedělal, takže v tomhle pomoct nemůžu. Já takovéto věci většinou řeším přes vlastní třídu (service), která mi tyto složitější prvky dokáže vytvořit. Tuto „továrnu“ si poté předávám do jednolivých formulářů, kde ji pořebuji.

Jednoduchý příklad:

<?php

class BirthdayContainerFactory
{
	private $datetimeFactory;

	public function __construct(DatetimeFactory $datetimeFactory)
	{
		$this->datetimeFactory = $datetimeFactory;
	}

	public function createBirthdayContainer(int $minAge, int $maxAge): Container
	{
		$container = $this->containerFactory->create();
		$container->addSelect('day', 'Den', $this->datimeFactory->getMonthsOptions())
			->setRequired()
			->setPrompt('Den');
		$container->addSelect('year', 'Rok', $this->datetimeFactory->getMonthsBetween($minAge, $maxAge))
			->setRequired()
			->setPrompt('Rok');
		$container->addSelect('month', 'Měsíc', $this->datimeFactory->getMonthsOptions())
			->setRequired()
			->setPrompt('Měsíc');
		return $container;
	}
}

?>

a pak ve formuláři

<?php

class CustomForm
{
	private $birthdayContainerFactory;

	public function __construct(BirthdayContainerFactory $birthdayContainerFactory)
	{
		$this->birthdayContainerFactory = $birthdayContainerFactory;
	}

	protected function createForm(): Form
	{
		....
		$form['birthday'] = $this->birthdayContainerFactory->createBirthdayContainer(1, 30);
	}
}


?>

Editoval Mistrfilda (27. 6. 2019 12:49)

MikeLacroix
Člen | 60
+
0
-

To vypadá dobře, díky!