Problém s formulármi 1. onSuccess() 2. flashMessage()
- donnie
- Člen | 12
Ahojte,
mám viac menších problémov … mám vytvorený formulár (továrničku) a k nej onSuccess[] funkciu, ktorá sa zavolá keď je formuolár správne vyplnený … ALE … za prvé … z nejakého dôvodu mi túto funkciu nechce zavolať … musím to zatiaľ urobiť cez ->isSuccess() … za druhé … keď nastavím ->setRequired() … nezobrazuje mi správu vnútri, ale len všeobecnú správu … vyplň toto pole … a to isté pri ->addRule() … napríklad pri odosielaní formulárov … poraďte, prosím …
a tu je môj kód …
public function createComponentContactForm()
{
$form = new Form();
$form->addText('email','E-mail',30)
->addRule(Form::EMAIL,"Zadaj e-mail v spr=avnom formáte !")
->setRequired("vlož svoj e-mail !");
$form->addText('subject','Predmet',30)
->setRequired("O čo ide ?");
$form->addTextArea('content','Správa',45,10)
->setRequired("Vlož správu !");
$form->addSubmit('submit','Odošli');
$form->onSuccess[] = callback($form,'signInFormSubmitted');
return $form;
}
public function signInFormSubmitted(Form $form)
{
$values = $form->getValues();
$this->flashMessage('Formulár bol odoslaný.');
//$this->redirect('Homepage:');
}
- donnie
- Člen | 12
Mal som to prvé, teda … Nette\Forms\Form … skúsil som dať to druhé, teda … Nette\Application\UI\Form a už mi napísalo správu, že zadávam e-mail v nesprávnom formáte, ale stále mi ukazuje tú všeovecnú správu a nie tú, ktorú zadávam do setRequired("") … a okrem toho z nejakého dôvodu mi napísalo …
Method Nette\Application\UI\Form::signInFormSubmitted() does not exist
takže tak či tak mám problém
- David Matějka
- Moderator | 6445
tu metodu nemas na $form
, ale na $this
,
takze pouzij
callback($this,'signInFormSubmitted');
//respektive tohle (jelikoz je fce callback deprecated)
array($this,'signInFormSubmitted');
//nebo diky nette magii
$this->signInFormSubmitted; //ano, bez zavorek
Editoval matej21 (8. 7. 2014 11:27)
- Pavel Macháň
- Člen | 282
donnie napsal(a):
Bohužiaľ, nič sa tým nezmenilo :-(
Můžeš ještě prubnout
$form->addText('email','E-mail',30)
->addRule(Form::MIN_LENGTH,"vlož svoj e-mail !", 1)
->addRule(Form::EMAIL,"Zadaj e-mail v spr=avnom formáte !");
$form->onSuccess[] = function(Form $form) {
$values = $form->getValues();
$this->flashMessage('Formulár bol odoslaný.');
$this->redirect('Homepage:'); // na homepage musis mit nekde vypsane flashes
};
Editoval Pavel Macháň (8. 7. 2014 11:28)
- donnie
- Člen | 12
Ja som to ešte inak robil …
public function renderDefault()
{
if($this['contactForm']->isSuccess()){
$this->flashMessage('Formulár bol odoslaný.');
$this->redirect('Homepage:');
}
}
a funguje, mne išlo skor o to, prečo nefunguje ten onsuccess/ callback funkcia a preco sa nezuju spravy pri setrequired
- David Matějka
- Moderator | 6445
To moje
by melo fungovat (tam metoda musi byt public).. co ti to pise?
ok :)
k tomu setRequired: jako myslis tu zpravu, co se zobrazi jeste v prohlizeci? to bude asi html5 validace prohlizece. Ta se necha vypnout pomoci
$form->elementPrototype->novalidate("novalidate");
Editoval matej21 (8. 7. 2014 11:43)