TYPO3/Extbase - 如何在验证/保存对象之前修剪值?

3
在Extbase中,通常我会在控制器内部处理表单验证,尤其是当我需要高级场景时。但现在我有一个简单但包含许多字段的大型表单,所以我决定不浪费时间,只是使用TYPO3的验证器。总体上来说,这样做是好的,但无论如何,我不能强制Extbase在验证之前修剪值,结果是Extbase保存了很多空格...所以它是无效的,示例:
/**
 * @var string
 * @validate StringLength(minimum=2, maximum=255)
 * @validate NotEmpty
 */
protected $fooName = '';

如我所说,我有数十个字段,希望避免手动验证... 有什么解决方案吗?

注:我尝试了extbase_filter扩展,如果它起作用的话将是一个很好的解决方案(不幸的是,在TYPO3 ver.6.2.6上没有任何效果)。

此外,出于明显的原因,在表单发送之前使用JS来修剪值也不是一个解决方案。

1个回答

9

您可以在set*方法内执行修剪操作。Extabase的MVC过程中的验证是在调用setters后发生的。

所以,您的示例将如下所示:

/**
 * @var string
 * @validate StringLength(minimum=2, maximum=255)
 * @validate NotEmpty
 */
protected $fooName = '';

public function setFooName($fooName)
{
    $this->fooName = trim($fooName);
}

没错,我经过一些调试才发现这个问题 ;) 它确保了验证的正确性(终于!)但仍然不能修剪重新加载表单中显示的值(即使将 trim() 添加到 getter 中)。 - biesior
这可能有点棘手,但你可以在控制器中使用$this->request->getReferringRequest()->getArgument('your_argument_name')进行尝试,如果存在验证错误,则不应为空。据我所知,从那里获取的值用作表单字段的值,以恢复用户输入。 - Viktor Livakivskyi
1
是的,我通常会在小表单中这样做...无论如何,虽然在setter中进行修剪时BE验证现在可以正常工作,但对于表单中的_cosmetic_修剪,我将使用JS(类似于BE TCE表单),所以实际上这个主题现在已经解决了。 - biesior

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接