jan*_*ver 11 php zend-framework zend-form
我有一个表单,用户可以在其中选中"创建新地址"复选框,然后可以在同一表单中填写此新地址的字段.
现在,我想仅在选中复选框时验证此新地址的字段.否则,应该忽略它们.
如何使用Zend_Form和Zend_Validate来做到这一点?
谢谢!
我认为最好,更正确的方法是创建一个自定义验证器.
您可以通过两种不同的方式执行此验证器,一种是使用传递给方法isValid的第二个参数,$ context,即要验证的当前表单,或者注入需要检查以进行验证的Checkbox元素,在构造函数中.我更喜欢最后一个:
<?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;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
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 ) );
//...
}
}
Run Code Online (Sandbox Code Playgroud)
我没有测试过代码,但我认为它应该可行.
| 归档时间: |
|
| 查看次数: |
6984 次 |
| 最近记录: |