Formulář – vlastní validační hláška u emailu

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

Ahoj,
potřeboval bych poradit, proč se mi u formuláře nezobrazuje vlastní validační hláška zadaná v addRule v případě, že email není platný. V továrničce to mám takto:

$form->addEmail('email', 'Email:')
	->setRequired('Zadejte email uživatele')
	->addRule(Form::EMAIL, 'Email není platný.');

Díky za každou radu.

Matey
Člen | 142
+
+1
-

Skúšal som to a fakt je tam niekde chyba, addEmail() vygeneruje 2× pravidlo pre :email

$form->addEmail('email', 'Email:')
	->setRequired('Prosím zadaj email.')
	->addRule($form::EMAIL, 'Prosím zadaj platný email.');
<input type="email" name="email" class="form-control" id="frm-editTranslation-sk-email" required data-nette-rules="[{"op":":filled","msg":"Prosím zadaj email."},{"op":":email","msg":"Please enter a valid email address."},{"op":":email","msg":"Prosím zadaj platný email."}]">

použi klasický textový prvok a nastav mu tie isté pravidlá, výsledok bude správny.

suwer
Člen | 33
+
0
-

Podle dokumentace se proste pri vytvoreni email inputu tohle pravidlo defaultne prida. No a jelikoz je prvni v rade, tak ti tvoje EMAIL pravidlo preplacne (podivej se na ten input ve vygenerovanem html kodu stranky).

Asi to ma co delat s naslednym generovanim html input type=email. Ale je to fakt docela matouci.

Jedno z reseni je zmenit si vychozi hlasky formularovych pravidel primo v config.neon, viz Konfigurace – Formulare

forms:
    messages:
        EQUAL: 'Please enter %s.'
        FILLED: 'Please complete mandatory field.'
        MIN_LENGTH: 'Please enter a value of at least %d characters.'
        EMAIL: '%label must be valid e-mail'

Editoval suwer (28. 2. 2017 16:21)

Alsatian
Člen | 177
+
0
-

Ahoj. Jak tohle potom řešíte u multijazyčného webu? Právě si nad tím lámu hlavu.

Pro překlady používám Kdyby\Translation\DI\TranslationExtension a rád bych nastavil vlastní hlášku u chybně zadaného emailu a to pro všechny používané jazyky.

Jenom upřesním, že po nasazení překladače dostanu v podstatě takto nepěknou hlášku
„messages.form.sign.Please enter a valid email address.“

Editoval Alsatian (10. 5. 2018 16:18)

Ondřej Kubíček
Člen | 494
+
0
-

jak to máš v kodu? měl bys tam mít jen messages.forn.sign pokud máš takhle cestu a jinak tomu formu nastavíš překladač $form->setTranslator($translator), což je v dokumentaci https://doc.nette.org/…on/templates#…

Editoval Ondřej Kubíček (10. 5. 2018 18:53)

Alsatian
Člen | 177
+
0
-

Jo jo, @OndřejKubíček , ale viz první příspěvek, ošetření správně zadaného emailu se děje automaticky. „messages.form.sign“ je tam proto, že pro zjednodušení takto startuji Form:

$form->setTranslator($this->translator->domain('messages.form.sign'));

Jde o to, při pokusu o odeslání formuláře s chybně zadaným emailem, třeba „123“, dostávám automatickou hlášku „Please enter a valid email address.“ v angličtině pro všechny jazyky. A neumím si ji nastavit sám. Viz příspěvek od „suwer“.

Editoval Alsatian (10. 5. 2018 20:00)

Alsatian
Člen | 177
+
+3
-

Vyřešil jsem to nakonec tak, že položku email nedefinuji jako email, ale jako text.
Potom si můžu dopsat svou validační hlášku pomocí pravidel. Tak třeba to někomu pomůže.

$form->addText('email', 'Emailová adresa')
                        ->addRule(Form::FILLED, 'Zadejte email')
                        ->addRule(Form::EMAIL, 'Email nemá správný formát');