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