Bunu yapmak için en iyi ve daha doğru bir şekilde özel bir doğrulayıcı oluşturma olduğunu düşünüyorum.
İki farklı şekillerde bu doğrulayıcı yapabileceği bir yöntem isValid, $ bağlam geçirilen ikinci parametre kullanılarak, yani doğrulanan bugünkü biçimidir, ya da, Onay Kutusu öğe enjekte, doğrulama gerçekleşmesi için kontrol edilmesi için bu ihtiyacı, kurucudaki. Ben son tercihim:
<?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;
}
}
Kullanımı:
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 ) );
//...
}
}
Ben kodu test değil, ama çalışması gerektiğini düşünüyorum.