为什么我的Extbase对象仅在创建时验证,而不在更新时验证

时间:2017-01-27 08:08:18

标签: validation typo3 extbase

我对TYPO3对象验证有疑问,但我无法解决。为简单起见,我们说我有对象A和B,关系A< -1:n - >乙

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

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

我怀疑行为可以与对象A和B中的其他关系相关联(B有一个链接到它的父亲,例如),因为在验证期间似乎所有子对象都得到了验证,即使我使用@ignorevalidation注释所有关系属性。

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

1 个答案:

答案 0 :(得分:2)

我从TYPO3 6.2中知道这个问题,我认为它仍然存在于7.6+中。我写了一篇关于这种行为的德国文章可能会对你有所帮助。 http://blog.teamgeist-medien.de/2016/02/typo3-extbase-validierung-von-unterobjekten-deaktivieren.html

摘要:在initialize-Actions中,您可以更改验证器并将其从特定属性中删除。

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);
        }
    }
}