【问题标题】:Why is my Extbase Object only validated on create but not on update为什么我的 Extbase 对象仅在创建时验证而不在更新时验证
【发布时间】:2017-01-27 08:08:17
【问题描述】:

我遇到了无法解决的 TYPO3 对象验证问题。为简单起见,假设我有对象 A 和 B,关系为 A B。

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

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

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

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

【问题讨论】:

    标签: validation typo3 extbase


    【解决方案1】:

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

    总结:在初始化操作中,您可以更改验证器并将它们从特定属性中删除。

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

    【讨论】:

    • 感谢您的回答保罗。实际上,我在发帖之前就已经找到了你的文章,而且它似乎与我所经历的很接近。我已经检查了使用您的代码 sn-p 生成了哪些验证器,事实上,除了验证器之外,我明确注释了每个关系属性,或者使用 CollectionValidator 或 ConjunctionValidator 检查。这样做的问题是,我可以删除所有属性验证器或一个都没有......因为似乎没有删除属性验证器的方法。我只能完全删除我的对象的 ConjunctionValidator。
    • 我还在一篇文章中描述了这一点,用于根据表单选择使用动态验证。我知道这看起来很丑陋,但是您可以创建一个与没有验证器的子对象的关系的新模型,并获取此“代理”模型的 ConjunctionValidator 并将其绑定到您在初始化 Acitons 中的请求。见:blog.teamgeist-medien.de/2015/05/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多