Vlastní systém chybových zpráv
- Tepster
- Člen | 28
Zdravím,
Formuláře samotné nabízejí možnost validace – nastavím jim
addRule()
a už se mi zobrazuje chybová zpráva při špatném
vyplnění. Ale já bych potřeboval, abych si tyto zprávy mohl více
nastavovat – z hlediska designu třeba chci, aby měla každá jinou barvu
apod. Jak na to? Jak co nejjednodušeji udělat, aby Formulář zprávy nepsal
do Flash zpráv, ale někam jinam a já si mohl určit, kdy a jak se vypíší?
Ideální by bylo, kdybych mohl u každé položky formuláře (v PHP)
nastavit tu danou zprávu – mít třeba novou metodu
setMessage()
, díky které bych mohl nastavit barvu a jiné
věci – je tohle možné udělat? Přidat metodu formulářovým prvkům?
Děkuji za rady
- akadlec
- Člen | 1326
Tak barvičky a styly si můžeš ovlivnit přímo v renderu, záleží jak s formem pracuješ. Form chybové zprávy nezobrazuje jako flash ale jako vlastní, takže řešením je si ty zprávy z formu na konci vyzobnout a před tvému zpracování třeba pomocí flash. Já toto konkrétně taky řešil protože jsem chtěl mít veškeré hlášky na jednom místě a zobrazované jedním způsobem. Prvně jsem je cpal do nettich flash messages a vykresloval v komponentě, ale to mě nevyhovovalo kvůli modálů apod. tak jsem si na to udělal službu s extensions no a ve formulářích se to vyřešil tak že mám ve všech registrovanou událost onsubmit a tam si to přeliju:
public function submit(Application\UI\Form $form)
{
// Form have some error messages
if ($form->hasErrors()) {
// Add form errors to flash messages
foreach ($form->getErrors() as $error) {
// ...add flash message to parent control
$form->getParent()->flashMessage($error, "warning");
}
// Add flag that form is not ok
$form->getPresenter()->payload->formOk = FALSE;
// Form is without errors
} else {
// Add flag that form is ok
$form->getPresenter()->payload->formOk = TRUE;
}
}
tim ty chybové hlášky z formuláře vyzobu a naliju je do flash zpráviček a mám to tak vše konzistentní.
- akadlec
- Člen | 1326
Jednoduše, jak definuješ události formuláře tak si tam přidáš submit akci jak jsem ji uvedl výše.
class HomepagePresenter extends UI\Presenter
{
// ...
protected function createComponentRegistrationForm()
{
$form = new UI\Form;
$form->addText('name', 'Jméno:');
$form->addPassword('password', 'Heslo:');
$form->addSubmit('login', 'Registrovat');
$form->onSuccess[] = array($this, 'registrationFormSucceeded');
$form->onSubmit[] = array($this, 'submitForm');
return $form;
}
// volá se po úspěšném odeslání formuláře
public function registrationFormSucceeded(UI\Form $form, $values)
{
// ...
$this->flashMessage('Byl jste úspěšně registrován.');
$this->redirect('Homepage:');
}
public function submitForm(UI\Form $form)
{
// Form have some error messages
if ($form->hasErrors()) {
// Add form errors to flash messages
foreach ($form->getErrors() as $error) {
// ...add flash message to parent control
$form->getParent()->flashMessage($error, "warning");
}
// Add flag that form is not ok
$form->getPresenter()->payload->formOk = FALSE;
// Form is without errors
} else {
// Add flag that form is ok
$form->getPresenter()->payload->formOk = TRUE;
}
}
}