Problém s formulármi 1. onSuccess() 2. flashMessage()

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

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:');
        }
Jan Endel
Člen | 1016
+
0
-

co máš nahoře v use? Nette\Forms\Form nebo Nette\Application\UI\Form?

donnie
Člen | 12
+
0
-

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

ondrej256
Člen | 187
+
-1
-

Zkus u metody signInFormSubmitted přepsat public na protected. Možná je to blbost, ale zdá se mně, že mně to jednou taky dělalo

David Matějka
Moderator | 6445
+
0
-

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)

donnie
Člen | 12
+
0
-

Bohužiaľ, nič sa tým nezmenilo :-(

Pavel Macháň
Člen | 282
+
0
-

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

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

donnie
Člen | 12
+
0
-

Beriem späť ! Nevšimol som si komentár, ktorý mi radil, aby som zmenil $form na $this pri volaní funkcie callback … ešte jeden maličký detail … Čo tie spŕavy, ktoré sa nezobrazujú pri zadaní ->setRequired(""); ?

David Matějka
Moderator | 6445
+
0
-

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)

donnie
Člen | 12
+
0
-

matej21 napsal(a):

Šikovny .. funguje skvele … diky