Zend framework2 \Zend\Form\Element\Collection验证作为一个整体
我有收集表格。我将验证附加到整个集合中,我只想检查集合元素之间是否存在某些关系 而且效果很好。如果数据错误,表单将无法通过isValid测试 但有一个问题。formElementErrors/getMessages未返回任何内容。 我做错了什么 我的表格:Zend framework2 \Zend\Form\Element\Collection验证作为一个整体,zend-framework2,zend-form,Zend Framework2,Zend Form,我有收集表格。我将验证附加到整个集合中,我只想检查集合元素之间是否存在某些关系 而且效果很好。如果数据错误,表单将无法通过isValid测试 但有一个问题。formElementErrors/getMessages未返回任何内容。 我做错了什么 我的表格: class Form implements InputFilterProviderInterface { /** * @return array */ public function getInputFi
class Form implements InputFilterProviderInterface {
/**
* @return array
*/
public function getInputFilterSpecification()
{
return [
[
'name' => 'legend',
'required' => true,
'allowEmpty' => false,
'validators' => [
['name' => 'Callback', 'options' => [
'messages' => [
\Zend\Validator\Callback::INVALID_VALUE => 'Wrong',
],
'callback' => function ($values, $context=[]) {
return false;
},
]],
]
],
];
}
public function init()
{
$this->add(
[
'name' => 'legend',
'type' => 'Zend\Form\Element\Collection',
'options' => [
'label' => 'Legenda',
'count' => 2,
'should_create_template' => true,
'allow_add' => true,
'template_placeholder' => '__placeholder__',
'target_element' => [
'type' => 'Narzedzie\Form\Legenda\LegendyOpcjeFieldset',
],
],
]
);
}
}
和视图:
$element = $NarzedzieForm->get('legend');
var_dump($element->getMessages()); // in case of error - empty array!
echo $this->formElementErrors($element); // in case of error - empty string
echo $this->formColleciton($element);
也许你需要同时添加这两条消息
'messages' => [
\Zend\Validator\Callback::INVALID_VALUE => 'Wrong VALUE',
\Zend\Validator\Callback::INVALID_CALLBACK => 'Wrong CALLBACK',
],
因为您只提供了一条回调消息,所以可能会抑制无效回调消息?我希望它能回到违约状态。但是所有这些验证器消息在我看来都有点愚蠢
看起来您的回调中有一个错误,可能是抛出了一个异常,并在try-catch语句的验证器中被捕获
应该是吗
function ($values, $context=[]) {
foreach ($values as $value) {
if ($value['el'] == '1') return false;
}
return true;
},
在foreach中,数组的$value不是$value吗?可能想检查是否也设置了键,是否设置了isset$值['el']?我确信这在回调中不是错误-如果我在回调中只返回false/true,则情况相同;我要检查无效的回调。每个部分只是一个例子。