Jak vyřešit zbytečné GET parametry projevené v URL?

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

Ahoj, řeším jednu spíše kosmetickou věc. V presenteru mám továrničku na formulář :

protected function createComponentFiltrFormular()
    {
        .
		.

        $form = new UI\Form;
        $form->setMethod('GET');
        $form->addSelect('vyrobce','Výrobci')->setItems($vyrobci, FALSE)->setPrompt('Výrobci');
        $form->addSelect('obchod','Obchody')->setItems($obchody, FALSE)->setPrompt('Obchody');

        $form->addSubmit('filtr_btn', 'Filtrovat');
        return $form;
    }

Po odeslání formuláře se mi stránka obnoví a projeví se GET v URL asi nějak takto :

trendi/katalog/67-boty?vyrobce=Nike&obchod=Baťa&filtr_btn=Filtrovat&do=filtrFormular-submit

Jak docílím toho, aby se mi zbytečně do url neprojevovaly buttony a další zbytečné věci ? Chtěl bych aby výsledná url s použitým filtrem formulářem vypadala nějak takto :

trendi/katalog/67-boty?vyrobce=Nike&obchod=Baťa

Šaman
Člen | 2668
+
+4
-

V obslužné metodě udělej na konci redirect. Je to lepší i kvůli tomu, že v tvém případě se při obnovení stránky znovu odešlou data z formuláře a to přece nechceš.

Kevlud
Člen | 3
+
-4
-

Díky moc za radu. :) Vyřešil jsem to nějak takhle, pro ty co by to náhodou mohlo taky někdy zajímat :

	protected function createComponentFiltrFormular()
    {
		$form = new UI\Form;
        $form->addSelect('vyrobce','Výrobci')->setItems($vyrobci, FALSE)->setPrompt('Výrobci');
        $form->addSelect('obchod','Obchody')->setItems($obchody, FALSE)->setPrompt('Obchody');
        $form->addSubmit('filtr_btn', 'Filtrovat');
        $form->onSuccess[] = array($this, 'filtrFormularSucceeded');
        return $form;
    }

    public function filtrFormularSucceeded(UI\Form $form, $values)
    {
        $this->redirect('this', array_merge($_GET,array(
                'vyrobce' => $values->vyrobce,
                'obchod' => $values->obchod)
        ));
    }
David Matějka
Moderator | 6445
+
+8
-

@Kevlud proc tam pouzivas $_GET? na superglobalni promenne v nette (skoro) nikdy nesahej primo

Kevlud
Člen | 3
+
0
-

Aha, to jsem nevěděl. Je to takhle lepší ?

public function filtrFormularSucceeded(UI\Form $form, $values)
    {
        $this->redirect('this', array(
                'vyrobce' => $values->vyrobce,
                'obchod' => $values->obchod)
        );
    }