Php 如何从Zend Framework 2中的控制器修改表单验证器?
我正在使用Zend Framework 2。我已经在我的系统中定义了一些验证规则。这些工作按预期进行,没有任何问题 但是,在“编辑”模式下,我不希望这两个文件上载字段是必需的。我尝试对我的中的两个文件上载字段执行Php 如何从Zend Framework 2中的控制器修改表单验证器?,php,validation,zend-framework,zend-framework2,Php,Validation,Zend Framework,Zend Framework2,我正在使用Zend Framework 2。我已经在我的系统中定义了一些验证规则。这些工作按预期进行,没有任何问题 但是,在“编辑”模式下,我不希望这两个文件上载字段是必需的。我尝试对我的中的两个文件上载字段执行setRequired(false),但它似乎对验证没有任何影响,它仍然抛出一条“未找到文件”消息。我需要做什么才能让用户在不上传任何文件的情况下成功提交表单 感谢您的帮助。要在controller中进行更改表单验证,您必须删除当前验证并设置新验证。我希望这能帮助你: $form = n
setRequired(false)
,但它似乎对验证没有任何影响,它仍然抛出一条“未找到文件”消息。我需要做什么才能让用户在不上传任何文件的情况下成功提交表单
感谢您的帮助。要在controller中进行更改表单验证,您必须删除当前验证并设置新验证。我希望这能帮助你:
$form = new YourForm();
$form->setData ( $yourPostedData () );
$formInputFilter = $form->getInputFilter ();
// change filter
$formInputFilter->remove ( 'your_field' );
$inputFactory = new \Zend\InputFilter\Factory();
$formInputFilter->add ( $inputFactory->createInput ( array (
'name' => 'your_field',
'required' => false
) ) );
if ($form->isValid ()) {
//...
}
对于控制器中的更改表单验证,必须删除当前验证并设置新验证。我希望这能帮助你:
$form = new YourForm();
$form->setData ( $yourPostedData () );
$formInputFilter = $form->getInputFilter ();
// change filter
$formInputFilter->remove ( 'your_field' );
$inputFactory = new \Zend\InputFilter\Factory();
$formInputFilter->add ( $inputFactory->createInput ( array (
'name' => 'your_field',
'required' => false
) ) );
if ($form->isValid ()) {
//...
}
你可以用
文件规定:
Zend\Form为底层InputFilter的setValidationGroup()方法提供了一个代理方法,允许我们执行此操作
您所需要做的就是命名需要验证的字段(忽略上载元素名称)
你可以用
文件规定:
Zend\Form为底层InputFilter的setValidationGroup()方法提供了一个代理方法,允许我们执行此操作
您所需要做的就是命名需要验证的字段(忽略上载元素名称)
我收到的错误消息“未找到文件”使我意识到我遇到的问题比设置验证器/过滤器更严重 表单通过使用FormData对象的AJAX脚本进行处理。我使用以下方法将文件添加到对象:
oAgencyFormData.append(“cssFilename”,document.getElementById('logonname')。文件[0])代码>
然后将对象传递给AJAX调用。我意识到,在没有上传文件的情况下,“未定义”将被传递到脚本。因此,我将其分离为一个变量,如果未指定任何文件,则该变量被赋值为“”:
var oLogoFile = document.getElementById('logoName').files[0];
var oCssFile = document.getElementById('cssFilename').files[0];
// define defaults for file upload fields (used if nothing is uploaded)
if(typeof oLogoFile === 'undefined'){
oLogoFile = '';
};
if(typeof oCssFile === 'undefined'){
oCssFile = '';
};
一旦我这样做了,文件验证程序就如预期的那样工作。我收到的错误消息“未找到文件”使我意识到我遇到的问题比设置验证程序/过滤器更严重
表单通过使用FormData对象的AJAX脚本进行处理。我使用以下方法将文件添加到对象:
oAgencyFormData.append(“cssFilename”,document.getElementById('logonname')。文件[0])代码>
然后将对象传递给AJAX调用。我意识到,在没有上传文件的情况下,“未定义”将被传递到脚本。因此,我将其分离为一个变量,如果未指定任何文件,则该变量被赋值为“”:
var oLogoFile = document.getElementById('logoName').files[0];
var oCssFile = document.getElementById('cssFilename').files[0];
// define defaults for file upload fields (used if nothing is uploaded)
if(typeof oLogoFile === 'undefined'){
oLogoFile = '';
};
if(typeof oCssFile === 'undefined'){
oCssFile = '';
};
一旦我这样做了,那么文件验证程序就会像预期的那样工作。我也遇到了同样的问题,我就是这样解决的:
$form->remove('your_field');
$center->getInputFilter()->remove('your_field');
希望有帮助 我也遇到了同样的问题,我就是这样解决的:
$form->remove('your_field');
$center->getInputFilter()->remove('your_field');
希望有帮助