Formulář – vlastní validační hláška u emailu
- andros
- Člen | 145
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
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
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
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
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
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
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');