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.