Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从Zend Framework 2中的控制器修改表单验证器?_Php_Validation_Zend Framework_Zend Framework2 - Fatal编程技术网

Php 如何从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

我正在使用Zend Framework 2。我已经在我的系统中定义了一些验证规则。这些工作按预期进行,没有任何问题

但是,在“编辑”模式下,我不希望这两个文件上载字段是必需的。我尝试对我的中的两个文件上载字段执行
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');
希望有帮助