Předání parametrů do komponenty při použití Interface

- Ripper
 - Člen | 56
 
Dobrý večer všem,
našel jsem skvělou věc – https://doc.nette.org/…tion/factory – začal jsem to používat, ale teď jsem dorazil k tomu, že nevím jak mám do komponenty předat z presenteru nějaký parametr, pokud používám tento způsob „volání“ komponenty.
Nejlépe abych mohl parametr před někde tady –
/**
 * @return FlashMessageControl
 */
protected function createComponentFlashMessage()
{
	return $this->flashMessageControl->create();
}
				
- vitkutny
 - Člen | 73
 
/**
 * @return FlashMessageControl
 */
protected function createComponentFlashMessage()
{
    return $this->flashMessageControl->create($mojePromenna);
}
interface FlashMessageContolFactory{
/**
* @return ...
*/
	public function create($mojePromenna);
}
services:
	-
		implement: FlashMessageControlFactory
		parameters: [mojePromenna]
		arguments: [%mojePromenna%]
a samozřejmě upravit konstruktor Control třídy, aby jako první parametr příjmala tuto proměnnou, snad jsem na nic nezapoměl

- Vojtěch Dobeš
 - Gold Partner | 1316
 
Pokud se ten argument konstruktoru bude jmenovat taky
$mojePromenna (aby to odpovídalo zápisu v NEON konfiguraci), tak
dokonce nemusí být první, může být i poslední, myslím.

- Jiří Nápravník
 - Člen | 710
 
vojtech.dobes: opravdu to tak jde? Ja se prave snazil dostat tyhle parametry na konec, protoze chci mit jako prvni ty „autowiringove“ a na konci tyhle, a nepodarilo se mi to jinak nez, pouzit v parametrs (nebo arguments?) …, …, mojePromenna

- Ripper
 - Člen | 56
 
Děkuji za odpovědi, bohužel, nedaří se mi tam ten parametr dostat, napíšu zdroj co mám –
Presenter –
        /** @var IFlashMessagesControlFactory @inject */
	public $flashMessageControl;
	/**
	* Render Default
	*/
	public function renderDefault()
	{
		$this->flashMessage('Testovací zpráva funguje!');
		$this->flashMessage('Testovací zpráva s parametrem "info" funguje!', 'info');
	}
	/**
	 * @return FlashMessagesControl
	 */
	protected function createComponentFlashMessage()
	{
		return $this->flashMessageControl->create('asd');
	}
Interface –
interface IFlashMessagesControlFactory
{
	/**
	 * @internal param null $templateFile
	 *
	 * @param $templateFile
	 *
	 * @return FlashMessagesControl
	 */
	public function create($templateFile);
}
A komponenta –
       /**
	 * @param \Kdyby\Translation\Translator $translator
	 * @param null $templateFile
	 */
	public function __construct(Translator $translator, $templateFile = NULL)
	{
		parent::__construct();
		$this->translator = $translator;
		if (!$templateFile) {
			$templateFile = __DIR__ . '/FlashMessagesControl.latte';
		}
		$this->templateFile = $templateFile;
	}
Neon –
services:
	flashmessages:
		implement: IFlashMessagesControlFactory
		parameters: [templateFile]
Nefunguje ani když odstraním z contructoru Translator.

- vitkutny
 - Člen | 73
 
teď jsem si vzpoměl že to co jsem psal, jde pouze v masteru díky komitu před 16 dny https://github.com/…te/pull/1398
pokud použiješ novější verzi nette nemusíš uvádět duplicitně (už je v továrničce) název vytvářené komponenty