jak vrátit hodnotu, kterou generuje komponenta
- Thommie
- Člen | 34
Ahoj,
mám komponentu, která mi udělá jeden input k instanci formuláře, který jí pošlu.
Jak v prezenteru udělám to, abych dostal zase tu instanci zpět?
Formulář v komponentě Vyhledavani:
protected function createComponentVlozitInput() {
if(!is_object($this->form)) {
$form = new Form;
} else {
$form = $this->form;
}
$form->addText($this->nazev_inputu, 'Vyhledávání')
->setAttribute("placeholder", $this->placeholder)
->setAttribute("class", $this->nazev_inputu)
->setRequired(FALSE);
$form->addProtection('Vypršel časový limit, zkuste to prosím znovu');
$form->onSuccess[] = [$this, 'vyhledavaniFormSucceeded'];
return $form;
}
Formulář v prezenteru, kam potřebuji předat input z komponenty:
public function createComponentFormPrehledNeceho() {
$form = new Form;
$form->addText("neco", 'Něco')
->setAttribute("placeholder", "")
->setAttribute("class", "")
->setRequired(FALSE);
$kam_smerovat = "";
$placeholder = "Název produktu";
$kde_hledat = array(
);
//jaká data potřebujeme vrátit
$output = array(
);
$odeslat_form = 0;
$nazev_inputu = "vyhledat_produkty_test";
$form = $this->createComponentVlozitInput($form);
$form->addProtection('Vypršel časový limit, zkuste to prosím znovu');
$form->onSuccess[] = [$this, 'vyhledavaniFormSucceeded'];
return $form;
}
Toto mi vyhazuje chybu, protože komponenta nevrací instanci formuláře ale komponentu jako takovou.
Díky za radu
- Ondřej Kubíček
- Člen | 494
createComponentVlozitInput
nemá žádný parametr a ty tam
předáváš $form
, tak předpokládám že v té metodě chceš
pracovat s tím a navíc ty to potřebuješ mít jako komponentu, proč to
není obyčejná metoda, která jen formu přidá další input?
- filsedla
- Člen | 101
Ahoj. Tak, za prvé, objekty formuláře $form
nejsou immutable,
a předávají se referencí, tudíž když je někam předáš a tam změníš,
změna se projeví i na původní instanci. Tudíž problém nemůže být
v tom, že bys neměl způsob, jak $form
vrátit
zase „výš“.
Tenhle kód nemá smysl, přesněji jeho část $form = ...
$form = $this->createComponentVlozitInput($form);
Taky nemusíš psát $form = $form->addText("neco", 'Něco')
,
ale jen $form->addText("neco", 'Něco')
.
Editoval filsedla (9. 8. 2019 17:51)