Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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
Validation 为什么Extbase对象只在创建时验证,而在更新时不验证_Validation_Typo3_Extbase - Fatal编程技术网

Validation 为什么Extbase对象只在创建时验证,而在更新时不验证

Validation 为什么Extbase对象只在创建时验证,而在更新时不验证,validation,typo3,extbase,Validation,Typo3,Extbase,我有一个关于TYPO3对象验证的问题,我一直无法解决。为了简单起见,假设我有对象A和B,它们之间有一个关系 对象A有一些属性在A模型中被标记为@validate NotEmpty,如果我使用一个表单创建一个新的实例(生成了一个验证错误,并且该字段添加了一个css错误类),那么这个属性就可以正常工作 如果对象已经存在,并且我更改了它(使用标准的编辑/更新构造),那么验证将被完全忽略,并且我可以使用标记为@validate NotEmpty的属性的空值来持久化该对象 我怀疑该行为可能与对象A和B中的

我有一个关于TYPO3对象验证的问题,我一直无法解决。为了简单起见,假设我有对象A和B,它们之间有一个关系

对象A有一些属性在A模型中被标记为@validate NotEmpty,如果我使用一个表单创建一个新的实例(生成了一个验证错误,并且该字段添加了一个css错误类),那么这个属性就可以正常工作

如果对象已经存在,并且我更改了它(使用标准的编辑/更新构造),那么验证将被完全忽略,并且我可以使用标记为@validate NotEmpty的属性的空值来持久化该对象

我怀疑该行为可能与对象A和B中的其他关系有关(例如,B链接到它的父对象),因为在验证过程中,似乎所有子对象都会得到验证,尽管我用@ignorevalidation注释了所有关系属性


我可以做些什么来调试这种行为吗?有没有办法阻止Extbase验证子对象或通过关系属性连接的任何对象?

我从TYPO3 6.2中知道这个问题,我认为它仍然存在于7.6+中。我写了一篇关于这种行为的德国文章,可能会对你有所帮助

摘要:在初始化操作中,您可以更改验证器并将其从特定属性中删除

public function initializeCreateAction() {
    if ($this->arguments->hasArgument('newPosten')) {
        /** @var \TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator */
        $conjunctionValidator = $this->arguments->getArgument('newPosten')->getValidator();
        // REMOVES ALL VALIDATORS! MODIFY TO MAKE IT MORE SPECIFIC!
        foreach ($conjunctionValidator->getValidators() as $validator) {
            $conjunctionValidator->removeValidator($validator);
        }
    }
}

我从Type36.2中知道这个问题,我认为它仍然存在于7.6+中。我写了一篇关于这种行为的德国文章,可能会对你有所帮助

摘要:在初始化操作中,您可以更改验证器并将其从特定属性中删除

public function initializeCreateAction() {
    if ($this->arguments->hasArgument('newPosten')) {
        /** @var \TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator */
        $conjunctionValidator = $this->arguments->getArgument('newPosten')->getValidator();
        // REMOVES ALL VALIDATORS! MODIFY TO MAKE IT MORE SPECIFIC!
        foreach ($conjunctionValidator->getValidators() as $validator) {
            $conjunctionValidator->removeValidator($validator);
        }
    }
}

谢谢你的回答,保罗。事实上,我在这里发布之前已经找到了你的文章,它似乎与我的经历非常接近。我已经检查了使用您的代码片段生成的验证器,事实上,除了我明确注释的验证器之外,每个关系属性都是使用CollectionValidator或ContinonValidator检查的。问题是,我可以删除所有属性验证器,也可以不删除任何属性验证器……因为似乎没有删除属性验证器的方法。我只能完全删除对象的ContinonValidator。我还在一篇文章中描述了根据表单选择使用动态验证。我知道这看起来很难看,但您可以创建一个新模型,该模型与子对象有关系,而无需验证程序,然后获取此“代理”模型的ContinonValidator,并将其绑定到initialize Acitons中的请求。见:保罗,谢谢你的回答。事实上,我在这里发布之前已经找到了你的文章,它似乎与我的经历非常接近。我已经检查了使用您的代码片段生成的验证器,事实上,除了我明确注释的验证器之外,每个关系属性都是使用CollectionValidator或ContinonValidator检查的。问题是,我可以删除所有属性验证器,也可以不删除任何属性验证器……因为似乎没有删除属性验证器的方法。我只能完全删除对象的ContinonValidator。我还在一篇文章中描述了根据表单选择使用动态验证。我知道这看起来很难看,但您可以创建一个新模型,该模型与子对象有关系,而无需验证程序,然后获取此“代理”模型的ContinonValidator,并将其绑定到initialize Acitons中的请求。见: