Credo che la migliore e più corretto modo per farlo è la creazione di un validatore personalizzato.
È possibile eseguire questo validatore in due modi diversi: uno utilizza il secondo parametro passato al metodo isValid, $ context, ovvero il modulo corrente che viene convalidato o, inietto l'elemento Checkbox, che deve essere controllato per convalida per verificarsi, nel costruttore. Io preferisco l'ultimo:
<?php
class RequiredIfCheckboxIsChecked extends Zend_Validate_Abstract {
const REQUIRED = 'required';
protected $element;
protected $_messageTemplates = array(
self::REQUIRED => 'Element required'
);
public function __construct(Zend_Form_Element_Checkbox $element)
{
$this->element = $element;
}
public function isValid($value)
{
$this->_setValue($value);
if($this->element->isChecked() && $value === '') {
$this->_error(self::REQUIRED);
return false;
}
return true;
}
}
Usage:
class MyForm extends Zend_Form {
public function init()
{
//...
$checkElement = new Zend_Form_Element_Checkbox('checkbox');
$checkElement->setRequired();
$dependentElement = new Zend_Form_Element_Text('text');
$dependentElement->setAllowEmpty(false)
->addValidator(new RequiredIfCheckboxIsChecked($checkElement));
//...
}
}
Non ho ancora testato il codice, ma penso che dovrebbe funzionare.
vedi la mia risposta =) – JCM