对于我的一个实体,我使用module.exports = {
sum(a, b) {...}
};
元素来Zend\Form\Form
使用户能够选择引用的实体。
DoctrineModule\Form\Element\ObjectSelect
引用的实体可能为空(=数据库中的外键字段可以是class MyEntityForm extends Zend\Form\Form
{
public function __construct()
{
// ...
$this->add([
'name' => 'referenced_entity',
'type' => 'DoctrineModule\Form\Element\ObjectSelect',
'options' => [
'object_manager' => $object_manager,
'target_class' => 'MyOtherEntity',
'property' => 'id',
'display_empty_item' => true
],
]);
// ...
}
}
)。我只是无法获得表单来验证是否没有选择引用的实体。即使给定的NULL
为空(referenced_entity
或null
)或根本不存在(数据数组中缺少键""
),我希望我的表单能够验证。
我尝试了各种不同的输入滤波器规格,最后的设置如下
referenced_entity
但无济于事,验证错误保持不变(class MyEntityForm
extends Zend\Form\Form
implements Zend\InputFilter\InputProviderInterface
{
// ...
public function getInputSpecification()
{
return [
// ...
'referenced_entity' => [
'required' => false,
'allow_empty' => true,
'continue_if_empty' => false
],
// ...
}
// ...
}
之后$form->getMessages()
的var_dump摘录
$form->isValid()
我是否必须扩展'referenced_entity' =>
array (size=1)
'isEmpty' => string 'Value is required and can't be empty' (length=36)
表单元素以更改其输入过滤器规范并删除ObjectSelect
验证程序,还是有更简单的解决方案?
答案 0 :(得分:1)
如果我记得很清楚,如果您想在 Form
类中提供输入过滤器配置,那么您必须实现输入过滤器 ProviderInterface 界面。
如果您想在元素级别配置它,那么 Element
类必须实现 InputProviderInterface 接口
所以这意味着你的表单类必须是这样的:
class MyEntityForm
extends Zend\Form\Form
implements
// this...
// Zend\InputFilter\InputProviderInterface
// must be this!
Zend\InputFilter\InputFilterProviderInterface
{
// ...
public function getInputFilterSpecification()
{
return [
// ...
'referenced_entity' => [
'required' => false,
'validators' => [],
'filters' => [],
],
// ...
}
// ...
}
答案 1 :(得分:0)
DoctrineModule\Form\Element\ObjectSelect
继承了Zend\Form\Element\Select
,它自身包含了自动a input especification with a validator。
我没有测试自己,但解决此问题的方法是通过在选项中添加'disable_inarray_validator'
键来删除此验证器:
public function __construct()
{
// ...
$this->add([
'name' => 'referenced_entity',
'type' => 'DoctrineModule\Form\Element\ObjectSelect',
'options' => [
'object_manager' => $object_manager,
'target_class' => 'MyOtherEntity',
'property' => 'id',
'display_empty_item' => true,
'disable_inarray_validator' => true
],
]);
// ...
//or via method
$this->get('referenced_entity')->setDisableInArrayValidator(true);
}