Problém s formulářem – provádí se metoda startup i při submitu?
- n.u.r.v.
- Člen | 485
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
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
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
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
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
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}");
});