Přesměrování z komponenty

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

Řeším teď drobný problém s přesměrováním. Mám komponentu, která dědí od Controlu, vytváří formulář pro odeslání e-mailu. A teď se snažím po odeslání formuláře přesměrovat. Přesměrování proběhne. Jenže včetně odesláného formuláře, takže po refreshi stránky se formulář opět odesílá. Jak to vyřešit?

<?php
class AlertBox extends Control
{
   public function __construct($presenter, $name)
      {
         parent::__construct($presenter, $name);
         $form = new AppForm($this, $this->name);
         ...
         $form->addSubmit('send', _('Send'));
         $form->onSubmit[] = array(
            $this,
            'sendAlertInfo'
         );
         $this->form = $form;
      }

      ...

      public function sendAlertInfo(AppForm $form) {
         ...
         $this->->getPresenter()->redirect('this'); // totéž, pokud použiju $this->redirect('Homepage:');
      }
}
?>
Ondřej Mirtes
Člen | 1536
+
0
-

Předělej vytváření formuláře na továrničku, tohle nemůže fungovat.

BigCharlie
Člen | 284
+
0
-

Ale já na tu komponentu továrničku mám. V šabloně jí zobrazuju pomocí {widget alertBox} a v BasePresenteru mám tohle:

<?php
protected function createComponentAlertBox($name) {
   return new AlertBox($this, $name);
}
?>

To by mělo být v pořádku, ne?

UPDATE: Abych předešel otázce, proč to nemám celé v továrničce v BasePresenteru a komplikuju to komponentou – protože využívám manuální vykreslení formuláře.

Editoval BigCharlie (7. 2. 2010 13:11)

Ondřej Mirtes
Člen | 1536
+
0
-

No ale v tý komponentě nevytváříš formulář pomocí továrničky.

class AlertBox extends Control
{
	protected function createComponentForm() {
	  $form = new AppForm($this, $this->name);
         ...
         $form->addSubmit('send', _('Send'));
         $form->onSubmit[] = array(
            $this,
            'sendAlertInfo'
         );
	}

      ...

      public function sendAlertInfo(AppForm $form) {
         ...
         $this->->getPresenter()->redirect('this'); // totéž, pokud použiju $this->redirect('Homepage:');
      }
}

Editoval Ondřej Mirtes (7. 2. 2010 14:31)

jasir
Člen | 746
+
0
-

I v komponente vytvarej fomular pomocí tovarnicky

BigCharlie
Člen | 284
+
0
-

Ondřej Mirtes, Jasir: Díky, tohle jsem nevěděl a hodně to pomohlo.