Jde zjistit parametr z adresy mimo presenter?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ondrakrajcik
Člen | 45
+
0
-

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
+
0
-

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
+
0
-

Ř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
+
0
-

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
+
0
-

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
+
0
-

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.

ViPEr*CZ*
Člen | 818
+
0
-

Tak tak… proto je asi lepší ten setter, případně využít tzv. persistentního parametru (pro GET parametry).