Komponenta a parametry v createComponentForm
- libik
- Člen | 96
Ahoj,
mam komponentu
public function createComponentPageForms()
{
$control = new \FrontModule\PageFormsControl();
return $control;
}
Kterou volam v sablone s parametrem
{control pageForms [parametry]}
Komponenta ma vratit formular s vytvorenymi inputy podle parametru.
Parametry odchytnu v metode render($parametry), ale po odeslani formulare je potrebuje i metoda createComponentPageForm(), jenze ta je nema, kdyz se nespousti render().
public function render($params)
{
$this->formParams = json_decode($params);
$this->template->setFile(__DIR__ . "/PageFormsControl.latte");
$this->template->pageForm = $this['pageForm'];
$this->template->render();
}
/**
* @return Nette\Application\UI\Form
*/
public function createComponentPageForm()
{
//$this->formParams pro render funguje, po odeslani uz ne
$form = new Form;
return $form;
}
Ma to nejake reseni? Diky.
- David Matějka
- Moderator | 6445
spravnym resenim je nepouzivat parametry predavane ze sablony – zapomen, ze takova moznost existuje :)
o jake parametry se jedna?
- libik
- Člen | 96
V podstate resim v redakcnim systemu moznost zapsani specifickeho textoveho tvaru do textu stranky (mam takto vic tzv. rozsireni, ktera mi volaji komponenty, napr. pro vypis specifickych dat z db, apod). V tomto pripade jednoduchy formular, kdy uzivatel si zapise jednotlive inputy. Ja si to vyparsuju – znam tedy presne nazev komponenty a parametry, ze kterych formular sestavim. Tahle jedina obsahuje formular a mam tuhle potiz.
Resim to na urovni latte, neco jako :
{block pageContent}
{if $textSnippet['type'] == 'extension'} //$textSnippet je vyparsovany zapis rozsireni
{control $textSnippet['control'] $textSnippet['parameters']}
{/block}
Ten zapis v textu nahradim obsahem, ktery mi vyrenderuje prislusna
komponenta.
Asi by bylo lepsi to udelat pres nejaky setter, ale v teto fazi bych se tomu uz
radsi vyhnul.
Editoval libik (10. 4. 2017 14:29)
- David Matějka
- Moderator | 6445
nejlepsi je vsechny tyhle parametry nastavovat v presenteru v createComponent metode, kde je komponente predas treba pres konstruktor nebo pres setter.
- CZechBoY
- Člen | 3608
Prostě si ty parametry předej přes konstruktor/setter jak radí
@DavidMatějka.
presenter
protected function createComponentAbc()
{
$control = new AbcControl(); // nebo rovnou do konstruktoru
$control->setParameters($this->getParametersForComponentAbc());
return $control;
}
komponenta
class AbcControl extends UI\Control
{
private $parameters = [];
public function setParameters(array $parameters)
{
// ... ulož
$this->parameters = $parameters;
}
}
Editoval CZechBoY (10. 4. 2017 14:52)
- David Matějka
- Moderator | 6445
muzes treba v action metode neco jako
$this['abcControl']->setSomeParameter($foo)