Zamezení zobrazení formuláře v komponentě

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

Zdravím,
chtěl bych se zeptat, jestli je nějakým způsobem možné zabezpečit formulář tím, že ho vůbec nezobrazím a přesněruji ho na jinou stránku.

Pokoušel jsem se o při definici to takto:

    protected function createComponentWeightForm() {

        if($this->itemManager->authenticateItemOwner($this->getParameter('id'))) {
            $form = $this->weightFactory->create($this->getParameter('id'));
            $form->onSuccess[] = function ($form) {
                $form->getPresenter()->redirect('User:items');
            };
            return $form;
        }
        else {
            $this->getPresenter()->redirect('User:');
        }
    }

Uvedené mi padá na:

Nette\Application\AbortException

        else {
            $this->getPresenter()->redirect('User:');
        }

Vím že můžu zobrazení formu řešit až v šabloně, ale jde mi především o to přesměrování.

akadlec
Člen | 1326
+
+6
-

imho to děláš moc pozdě. měl bys to udělat už v akci při které ten form zobrazješ

Croc
Člen | 270
+
0
-

Jak v akci? Jediné co mám v presenteru kolem stránky formuláře je uvedená metoda createComponentWeightForm.

Tudíš nevím co máš přesně na mysli.

Oli
Člen | 1215
+
+1
-

No tak tam vytvoř akci na které se nachází ten formulář. A do té akce vlož tu kontrolu s přesměrováním. Pokud se nepřesměruje, tak je vše v pořádku a zobrazí se formulář… ;-)

function actionHokusPokus()
{
	if(!$this->itemManager->authenticateItemOwner($this->getParameter('id'))) {
		$this->getPresenter()->redirect('User:');
	}
}
Croc
Člen | 270
+
0
-

Aha, už to chápu :) Díky za radu

akadlec
Člen | 1326
+
0
-

Protože createComponentWeightForm se ti volá až v okamžiku kdy se stránka vykresluje, proto ji nemůžeš už přesměrovat. Vyjma tedy případu že k té komponentě přistoupíš ještě někdy jindy, třeba v nějaké akci.