我为我的问题找到了另一篇文章(ZF2 InputFilter not validating fieldset),但没有帮助。
我有一个类别实体,我想验证标题的长度。 所以我的模型(没有现有的getter和setter)
// namespace a
class Category
{
/**
* @var int
*/
private $id;
/**
* @var string
*/
private $name;
}
的我的表单:
Category
还有当前无法使用的过滤器。
class CategoryForm extends Form
{
public function init()
{
$this->setHydrator(new ClassMethods(false));
$this->setObject(new Category());
$this->setInputFilter(new CategoryFilter());
$this->add([
'name' => 'id',
'type' => 'hidden'
]);
$this->add([
'name' => 'name',
'type' => 'text'
]);
$this->add([
'name' => 'submit',
'type' => 'submit'
]);
}
}
如果有人在Controller中需要我的addAction:
class CategoryFilter extends InputFilter
{
public function init()
{
$this->add([
'name' => 'name',
'required' => true,
'filters' => [
['name' => StringTrim::class]
],
'validators' => [
[
'name' => StringLength::class,
'options' => [
'min' => 5
]
]
]
]);
}
}
在我发现的每个示例中,它都应该正常工作。但是我的表单从未得到验证或过滤(带有修饰)。
我忘记了什么吗?为什么不起作用?
答案 0 :(得分:1)
所以我做了一些改动。
类别表转到:
class CategoryForm extends Form
{
public function init()
{
$this->add(array(
'type' => CategoryFieldSet::class,
'options' => array(
'use_as_base_fieldset' => true,
),
));
$this->add([
'name' => 'submit',
'type' => 'submit'
]);
}
}
我也更改了过滤器
class CategoryFilter extends InputFilter
{
public function __construct()
{
$this->add([
'name' => 'name',
'required' => true,
'filters' => [
['name' => StringTrim::class]
],
'validators' => [
[
'name' => StringLength::class,
'options' => [
'min' => 5
]
]
]
]);
}
}
然后,我使用验证器定义了FieldSet:
class CategoryFieldSet extends Fieldset implements InputFilterProviderInterface
{
/**
*
*/
public function init()
{
$this->setHydrator(new ClassMethods(false));
$this->setObject(new Category());
$this->add([
'name' => 'id',
'type' => 'hidden'
]);
$this->add([
'name' => 'name',
'type' => 'text',
]);
}
/**
* Should return an array specification compatible with
* {@link Zend\InputFilter\Factory::createInputFilter()}.
*
* @return array
*/
public function getInputFilterSpecification()
{
$filter = new CategoryFilter();
return $filter->getInputs();
}
}
更改此设置后,我得到预期的错误消息,如:
输入的字符少于5个字符