Po změně POST na GET se nespustí funkce přilepená na onSuccess

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

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

22
Člen | 1478
+
0
-

bez kodu jak myslíš, že ti někdo poradí??? v první řadě si stahni aktualní betu.. beztak tam máš určitě špatný namespace.

petr.pavel
Člen | 535
+
0
-

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.

nanuqcz
Člen | 822
+
0
-

Odzkoušeno na verzi pro PHP 5.3 a fungují obě verze, s GET i s POST.

To, co jsi tu dal, je zjednodušený kód pro ukázku, nebo opravdu celý kód, který ti nefunguje?

petr.pavel
Člen | 535
+
0
-

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

https://forum.nette.org/…ery-v-action (v posledním příspěvku je – snad funkční – řešení).