Problém s formulářem – provádí se metoda startup i při submitu?

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

Ahoj, hledám v mé aplikaci jeden problém s formulářem (input má nastaveno max.50 znaků a když se zadá 48, tak se vůbec nezpracuje formulář,ale dojde k přesměrování na homepage a k tomu dochází nepravidelně a jen na hostingu, na localu ne).

Já mám v presenteru metodu startup(), metodu pro vytvoření formuláře createComponentnějakýform() a metodu pro zpracování formuláře zpracuj_form_Submitted(Form $form).

V tom presenteru mám přesměrování jen za určitých podmínek ve startupu a v té metodě pro zpracování formu a tak se chci zeptat, zda při submitu formuláře se provádí i metoda startup (abych někde nehledal chybu zbytečně…) Díky

David Matějka
Moderator | 6445
+
0
-

ano, startup se v presenteru provadi jako prvni a to vzdy, viz zivotni cyklus presenteru – zpracovani formu je jako to handle*

n.u.r.v.
Člen | 485
+
0
-

Ahoj, no, prošel jsem si kod a sice to teda projde tím startupem a díky jedné podmínce se provede příkaz $this->setView(‚něco‘);

Ale není to redirect, takže by to mělo nakonec stejně dojít do metody pro zpracování formuláře, kde se ke konci provede jiný $this->setView(něco2);, takže na konci bych měl vidět něco2.latte, jenže ke zpracování vůbec nedojde…

Když dám 47 a méně znaků, tak je to ok – formulář se zpracuje…

Další problém je, že tento problém se mě nepodařilo vyvolat na localhostu v žádném prohlížeči, ale na hostingu to dělá skoro pravidelně (8 z 10 případů)…

Dočasně jsem to musel vyřešit touto prasáckou podmínkou ve startupu:

startup(){
	if($this->getHttpRequest("do")!="krok1Form-submit" and $this->getHttpRequest("do")!="krok2Form-submit" and $this->getHttpRequest("do")!="krok3Form-submit" and $this->getHttpRequest("do")!="krok4Form-submit"){
		...
		...
		$this->setView('něco');
	}
}

...
createComponentkrok1Form() {//vytvoření formuláře

}
...
...
krok1_Submitted(Form $form) {//zpracování formuláře
	...
	...
	$this->setView(něco2);
}
Patrik Votoček
Člen | 2221
+
0
-

imho to asi bude tím že krok1_Submitted se provádí pouze pokud je form validní proto ti to nedojde až sem. nicméně je divné že říkáš že na locale ti to nedělá a na hostingu jo.

n.u.r.v.
Člen | 485
+
0
-

Teď jsem zjistil u kolegyně, která portál využívá, že oprava výše uvedeným způsobem nepomohla → zkoušeli jsem různé texty a šlo to, ale najednou jsme dali text, který obsahuje znak % a rouru | a padlo to – nevím, zda to byla náhoda, nebo to dělají tyto spec. znaky – o víkendu si s tím pohraju…

n.u.r.v.
Člen | 485
+
0
-

Tak jsem našel chybu:

input měl nastaveno:

//$countTitleMax = 50
->addRule(Form::MAX_LENGTH, 'Název může obsahovat maximálně %d znaků', '$countTitleMax')

Ale když jsem do inputu vložil např. tento text:

xxxxxxxx yyyyyyy zzzzzzz mmmmmmmmmmmm | aaaaa 50 %

tak nastala chyba.

Zkusil jsem tedy zrušit výše uvedený addrule a v php si vypsat délku textu → místo 50 znaků mě php napsalo strlen=52.

Dobře, dal jsem tedy mb_strlen a zobrazil se správný počet → 50.

Bohužel když přidám výše uvedený addrule, tak chyba – form se nepošle, takže jsem musel přes jquery přidat do inputu atribut maxlength ručně:

$(document).ready(function () {
            $("#id_inputu").attr("maxlength", "{$countTitleMax}");
});