Vlastní validátor reagující na jiný input
- Martin Mates
- Člen | 179
Chci se zeptat, jak byste šli na následující. Máme 2 inputy (Datum od a Datum do). Uživatel vyplní datum přes datepicker, nebo ho sám zadá ve formátu mm.dd.yyyy. Chci zkontrolovat, jestli náhodou není datum DO menší než datum OD.
Vím, jak by se to porovnalo. Vím, jak by se to dalo ošetřit po odeslání formuláře. Zajímá mě ale, jak by se psal vlastní validátor. V examples a tak různě jsou vždy, jednoduché validátory typu sudé číslo a podobně. Tady bych porovnával 2 hodnoty z formuláře. Takže asi bych to viděl na napsání vlastní metodu typu Form::EQUAL. Nevím si ale rady.
Jak byste na to šli?
Editoval Martin Mates (27. 4. 2009 15:14)
- Jod
- Člen | 701
Najjednoduchšie sa mi to robilo takto:
if($form->isSubmitted() && $form->isValid()) {
$data = $form->values;
if($this->model->validateRange($data['min_age'], $data['max_age'])) {
$this->model->save($data);
$this->redirect('');
}
else {
$form->addError(@BAD_RANGE);
}
}
Alebo cez custom rule:
$form->addText('text', 'text')
->addRule(array($this, 'validateText'), 'Text');
function validateText(TextInput $input) {
$form = $input->form;
$values = $input->values;
$value = $input->value;
$text2 = $values['text2'];
// ...
}
Iné riešenie som zatiaľ neriešil, nemám čas si pridávať zbytočnú prácu nad hlavu, keď to takto funguje.
Editoval Jod (27. 4. 2009 16:52)