Po změně POST na GET se nespustí funkce přilepená na onSuccess
- petr.pavel
- Člen | 535
Ahoj, v Koši jsem našel vlákno, které tento problém popisuje. Končí optimisticky řadou „opraveno“ a „vyřešeno“, ale asi se to netýkalo původního problému vlákna. Mě to i dnes pořád ještě nechodí. Nebo mi něco uniklo?
Nette Framework 2.0-beta (revision 6889b94 released on 2011–08–04)
Zde je zmiňované vlákno:
https://forum.nette.org/…kde-je-chyba
- petr.pavel
- Člen | 535
Bez kódu:
Přišlo mi, že situace je tak triviální, že kód nepotřebuje. Všechno
podstatné jsem popsal. Ale budiž:
public function createComponentVendorsFilterForm() {
$form = new NAppForm();
// $form->setMethod('GET'); // changing to GET would not trigger vendorsFilterSubmitted()
$form->addText('name', 'Company or Contact Name');
$form->addSubmit('search', 'Search');
$form->addSubmit('clear', 'Clear');
$form->onSuccess[] = callback($this, 'vendorsFilterSubmitted');
return $form;
}
public function vendorsFilterSubmitted(NAppForm $form) {
die('test');
}
Aktuální beta:
Beta, kterou používám, je z 2011–08–04, kdežto vlákno, na které jsem
odkazoval, je z 13. 11. 2008.
Ale budiž, stáhl jsem si kvůli tobě tu nejčerstvější betu (revision
f38d86f released on 2011–08–24). Nepřekvapilo mě, že to nepomohlo.
Namespace:
Používám verzi pro PHP 5.2 s prefixy. Myslím, že i kdybych používal
verzi pro PHP 5.3, tak by se to nemohlo týkat namespace. Když mi POST funguje
a GET ne, tak to těžko bude otázkou namespace.
Příznaky jsou stejné, jako v tom odkazovaném vláknu.
URL při metodě POST:
/?do=vendorsFilterForm-submit
GET po odeslání vypadá takto:
/?name=abc&search=Search
Na jednu stranu jsem rád, že jsi mi odpověděl a projevil zájem pomoci, na druhou stranu mi přijde, že jsi to udělal dost zbrkle.
- petr.pavel
- Člen | 535
Joj, tak to je zajímavé. Obě uvedené metody jsou úplné, nezjednodušoval jsem.
Zkopíroval jsem si čistý sandbox z poslední bety a vyrobil holý presenter s pokusem. A přišel jsem na to. V šabloně totiž nezobrazuji formulář pomocí {control vendorsFilterForm}, což by fungovalo i při GET, ale pomocí {form …} takto:
{form vendorsFilterForm}
{label name /} {input name} {input search}
{/form}
Chyba tedy je na straně Nette, protože {form …} při GET sice automaticky vloží skryté prvky formuláře (definované pomocí $form->addHidden()), ale nevloží skrytý prvek „do“ s hodnotou „vendorsFilterForm-submit“. Zatímco {control …} ho vloží.
Takže @22 měl nakonec pravdu, klíčová informace byla v kódu, který jsem neuvedl – v šabloně :-)
Mám napsat do trackeru nebo stačí tento post sem?
- uestla
- Backer | 799
https://forum.nette.org/…ery-v-action (v posledním příspěvku je – snad funkční – řešení).