Creo que la mejor y de forma más correcta de hacer esto está creando un validador personalizado.
Puede hacer este validador de dos maneras diferentes, una está utilizando el segundo parámetro pasado al método isValid, $ context, que es el formulario actual que se está validando, o, inserte el elemento de casilla de verificación, que debe verificarse para validación para ocurrir, en el constructor. Yo prefiero la última:
<?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;
}
}
Uso:
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));
//...
}
}
No he probado el código, pero creo que debería funcionar.
Véase mi respuesta =) – JCM