Podmínka s isSuccess v případě nastavené setAction u formuláře

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

Ahoj,

mám formulářovou stránku u které chci data zapsat do textového souboru a ten poté uživateli dát stáhnout. Kód mám přímo v HTML stránce, žádné šablony nebo pod.

Na stránce s formulářem mám nastaveno

<?php
$form ->setAction('zpracuj.php') // v tomto souboru je pouze vynucené stáhnutí souboru pomocí header
      ->setMethod('POP');
?>

V hlavní stránce s formulářem mám na konci tuto podmínku

<?php
if ($form->isSuccess())
{//načtení hodnot z formuláře a jejich zápis do texťáku, který po té nechávám stáhnout}
?>

V případě že ale mám setAction(‚zpracuj.php‘), tak mi nefunguje po stisku odesílacího tlačítka ve formuláři daná podmínka, neproběhne. Nevíte prosím jakou jinou podmínku zvolit, aby se mi po stisku odesílacího tlačítka projela?

Ot@s
Backer | 476
+
0
-

Otázka zní, jak nettí formulář zjistí, že je odeslaný. Zjistí to pomocí signálu, který si automaticky vygeneruje do atributu action (onen parametr do=…-submit). Když použiješ vlastní URL via setAction a nedoplníš tam ten signál, tak formulář o odeslání neví.

Z Tvého příspěvku pak není jasné, proč do action dáváš skript zpracuj.php a někde jinde se ptáš na isSuccess. To mě celé přijde nějaké zmatečné, resp. nerozumím tomu…

hAssassin
Člen | 293
+
0
-

Mozna budu vypadat jak magor, ale co je to za metodu ‚POP‘? Vidim poprve…

enumag
Člen | 2118
+
0
-

@hAssassin: Nápodobně. :-)

@Gill: Žádné setAction, prostě v presenteru při odeslání ulož ten soubor a přesměruj na jinou akci která jej nabídne ke stažení.

Gill
Člen | 13
+
0
-

hAssassin: překlep… myšleno pochopitelně POST
Ot@s: skript do setAction dávám, jelikož kódy header pro stáhnutí souboru, nemůžou být na stéjné stránce kde mám výpis formuláře pomocí echo. Moje otázka teda zní jak jinak než s setAction to udělat.

enumag: Vy jste na to co potřebuju přišel, ale jak prosím provést to přesměrování :(. Nepoužívám presenter, mám to všechno v jedné stránce. Takto mi příkaz nefunguje – neznámá funkce redirectUrl.

<?php
if ($form->isSuccess()) {
// ... zapis do souboru
redirectUrl('zpracuj.php');
}
?>
enumag
Člen | 2118
+
0
-

Aha, v tom případě asi klasicky header('Location: ...');.

Gill
Člen | 13
+
0
-

header(‚Location: …‘); nemůžu použít, jelikož prvně potřebuju ten formulář celý vykreslit a přesměrovat až po kliknutí na odesílací tlačítko. Je to ten samý problém s header, kdy je hlavička už odeslána vykreslením toho formuláře. Proto mám ten kód pro uložení souboru zvlášť. :(

Gill
Člen | 13
+
0
-

Vyřešeno na chatu uživatelem Majkl578, moc díky ;)
Přesné řešení pro přesměrování s header(‚Location: …‘); je

<?php
$form->onSuccess[] = function () { header('Location: zpracuj.php'); }; //na záčátku formu
...
$form->fireEvents(); //na konci formu
?>