Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inny][ZF2] InputFilter w zależności od wartości selecta
Forum PHP.pl > Forum > PHP > Frameworki
raker34
Witam,
w jaki sposób w InputFilterze (lub jakoś inaczej) zaimplementować weryfikacje formularza ale na takiej zasadzie że ustalone pole input-text weryfikowane jest w zależności od wartości input-select.

Przykładowo ktoś w seleccie może wybrac ileś tam różnych wartości natomiast ostatnia wartość jest "dodaj nową pozycje". Wtedy js wyświetla nam ten dodatkowy input i ktoś musi wpisać tam nową wartość?

Czyli ten input-text jest weryfikowany w zależności od tego czy ktoś wybrał jakąś tam wartość w selekcie.

Pozdrawiam
lucio1988
mineło trochę czasu, ale może ktoś inny będzie szukał rozwiązania. Najprostsza opcją jest przeciążenie metody isValid() formularza. Sprawdzasz w tej metodzie wartość selecta i w zależności od tej wartosci dodajesz lub usuwasz parametr required.

CODE

public function isValid()
{
if(!$this->has('mySelect')) {
return parent::isValid();
}

$value = $this->get('mySelect')->getValue();
if($value === 'expected_value') {
$filter = $this->getInputFilter();

if($filter->has('my_input')) {
// domyślnie ma false
$filter->get('my_input')->setRequired(true);
}
}

return parent::isValid();

}


druga możliwość to nadanie następujących opcji dla pola w InputFiltrze:
CODE
$this->add(array(
'name' => 'input_do_validacji',
'required' => true,
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'type' => NotEmpty::NULL // dzięki temu pole nie będzie validowane w przypadku pustej wartości
)
)
)
));

i stworzenie własnego validatora, który będzie sprawdzał wartość pola select. Wadą takiego rozwiązania jest, iż domyślnie wyrzucane są błedy z wszystkich validatorów. Ale można to kontrolować poprzez break_chain_on_failure.


Możesz skorzystać też z kolekcji. Czyli masz pole select z opcjami do wyboru (bez opcji "dodaj nowe pole"), a pod spodem (lub obok) button z informacją w stylu: "nie znalazłeś swojej pozycji? Dodaj nową!". Button ten tworzy nowe pole input, co zf2 swietnie wspiera - nie będą potrzebne nowe validatory/przeciążanie isValid() formularza.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.