Jde zjistit parametr z adresy mimo presenter?
- ondrakrajcik
- Člen | 45
Mám formuláře v App/Forms, řeším tam jak vytvoření formuláře tak vyhodnocení formuláře. Ve vyhodnocení ( formSubmitted() ), potřebuju zjistit parametr z url adresy. V presenteru lze parametr zjistit pomocí
$this->getParameter('nazevParametru')
Ale v mé třídě kde řeším formulář tuto třídu nelze použít.
Moje třída je typu class MujForm extends Nette\Application\UI\Form
Předpokládám, že to v této třídě nelze zjistit. Asi budu muset řešit vyhodnocení formuláře v presenteru že?
- Šaman
- Člen | 2666
Tu tvoji komponentu vytváří továrna v presenteru, tam ji můžeš nastavit parametry. Takže jestli máš ten formulář v samostatné třídě/komponentě, tak si přidej ten parametr jako třídní proměnnou a nastavuj ho pomocí public setteru, který zavoláš v metodě createComponentXxx(). Pak ho budeš mít k dospozici jak při vytváření, tak zpracování formuláře.
- Jiří Nápravník
- Člen | 710
Řešení formuláře je správně tam, v presenteru by správně být ani nemělo.
Mělo by ti stačit udělat:
$this->getPresenter()->getParameter('nazevParametru');
- mkoubik
- Člen | 728
Dej si tam setter:
class MujForm extends Nette\Application\UI\Form
{
...
public function setFooBar($fooBar)
{
$this->fooBar = $fooBar;
}
public function formSubmitted($form)
{
// $this->fooBar;
}
}
a nastav ho v továrničce:
class FooPresenter extends Nette\Application\UI\Presenter
{
public function createComponentMujForm()
{
$form = new MujForm();
$form->setFooBar($this->getParameter('fooBar'));
return $form;
}
}
- ondrakrajcik
- Člen | 45
Jiří Nápravník napsal(a):
Řešení formuláře je správně tam, v presenteru by správně být ani nemělo.
Mělo by ti stačit udělat:
$this->getPresenter()->getParameter('nazevParametru');
Děkuju. funguje
- Šaman
- Člen | 2666
ondrakrajcik napsal(a):
Jiří Nápravník napsal(a):
Řešení formuláře je správně tam, v presenteru by správně být ani nemělo.
Mělo by ti stačit udělat:
$this->getPresenter()->getParameter('nazevParametru');
Děkuju. funguje
Jenom pozor, presenter není k dispozici v konstruktoru. Poprvé ho lze použít v attached(), která se spustí ve chvíli, kdy se komponenta připojí do stromu komponent (na jejímž vrcholu je vždy presenter). V render metodách, i ve formOnSuccess() už to funguje.