我有一个如下所示的字段集:
namespace Store\Form;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
class ProductFieldset extends Fieldset implements InputFilterProviderInterface
{
public function init()
{
$this->setName('product');
$this->add(array(
'name' => 'isSale',
'type' => 'Checkbox',
'options' => array(
'label' => 'Is the product for sale?',
),
));
$this->add(array(
'name' => 'salePrice',
'options' => array(
'label' => 'Sale price',
),
));
}
public function getInputFilterSpecification()
{
return array(
'salePrice' => array(
'filters' => array(
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' =>'NotEmpty',
'break_chain_on_failure' => true,
'options' => array(
'messages' => array(
'isEmpty' => 'Enter the sale price.',
),
),
),
array(
'name' => 'Float',
'options' => array(
'locale' => 'pt_BR',
'messages' => array(
'notFloat' => 'Enter a valid price.',
),
),
),
),
),
);
}
}
我需要它以这样一种方式工作,即在isSale
检查时salePrice
需要,但如果isSale
未检查salePrice
则不需要。问题是我不知道如何在isValid()
调用之前删除验证器。
我可以反过来做:删除 inputfilter 规范中的验证器,如果isSale
选中则添加它。但我也不知道该怎么做。
这是我的表单类的样子:
use Zend\Form\Form;
class CreateProduct extends Form
{
public function init()
{
$this->setName('createProduct');
$this->add(array(
'type' => 'Store\Form\ProductFieldset',
'options' => array(
'use_as_base_fieldset' => true,
),
));
$this->add(array(
'name' => 'create',
'type' => 'Submit',
'attributes' => array(
'class' => 'btn btn-success',
'value' => 'Create',
),
));
}
}
提前致谢!