Ako riešite validáciu v prípade containerov
- dakota
- Člen | 148
Ako riešite validáciu v prípade containerov?
$container = $form->addContainer('files');
for($i=1; $i<=6; $i++) {
$container->addFile($i, 'File:')
}
// Musíte vybrať minimálne 1 súbor.
$container = $form->addContainer('categories');
for($i=1; $i<=6; $i++) {
$container->addSelect($i, 'Category:', $categories);
}
// Musíte vybrať minimálne 3 kategórie.
// Kategórie musia byť rozdielne.
$container = $form->addContainer('countries');
foreach($countries as $country) {
$container->addCheckbox($country->id, $country->name);
}
// Musíte zaškrtnúť minimálne 3 štáty.
- JakubJarabica
- Gold Partner | 184
Pozerám sa do API a asi by to chcelo mať metódu addRule na FormContainer, ktorý by bol predaný do validačného callbacku. FormContainer má metódu getControls, takže nad všetkými by si si iterovať vedel a obslužnú logiku by si si už dopísal zrejme bez problémov.
Teraz ako workaround asi dať vlastný callback len na jednu z týchto položiek, ktorá by do addRule bola posielaná ako prvý parameter automaticky a všetky ostatné controls, ktorých sa validácia týka a potrebuješ s nimi pracovať v callbacku predať v $args poli: https://api.nette.org/…extBase.html#…
- dakota
- Člen | 148
Vďaka za radu. Pridanie addRule na Container a použitie callback by možno mohlo pomôcť, ale neviem či je to dobré riešenie.
Ako jedno riešenie, neskúšal som to:
protected function createComponentSomeForm()
{
...
$container = $form->addContainer('files');
for($i=1; $i<=6; $i++) {
if($i == 1) {
$container->addFile($i, 'File:')
->addRule(callback($this, 'validateFileUpload'), 'Musíte vybrať minimálne 1 súbor.')
->addRule(...);
} else {
$container->addFile($i, 'File:')
->addRule(...);
}
}
....
}
public function validateFileUpload(IFormControl $control)
{
$form = $control->getForm();
$values = $form['files']->getValues();
// Musíte vybrať minimálne 1 súbor.
...
if(...) {
return FALSE;
}
...
return TRUE;
}
Pravidlo validateFileUpload by sa malo vykonať pred ostatnými pravidlami.
Je správne takto postupovať?
Editoval dakota (31. 1. 2011 11:57)