【发布时间】:2016-03-19 10:46:43
【问题描述】:
在设置要与 Symfony 表单一起使用的学说实体时,我想验证给定的字符串大小不会超过数据库的列大小。请注意,我使用的是字长而不是长度。
Symfony 附带了许多验证约束,尤其是Length Constraint。但是,查看它的文档
计算值长度时使用的字符集。这 如果可用,则使用 grapheme_strlen PHP 函数。如果没有,则 如果可用,则使用 mb_strlen PHP 函数。如果两者都不可用, 使用了strlen PHP函数。
它使用grapheme_strlen 或mb_strlen 返回字符串的视觉长度而不是实际大小。在处理非 ASCII 字符串时,实际大小是一个因素。例如,大多数亚洲语言为每个字符使用 3 个字节。
doctrine documentation 没有说明 @Column(length) 注释,这让我相信这是一个字节数。所以,如果我声明一个长度为 64 的列和一个最大大小为 64 的约束,就会出现问题。
现在,我可以使用Callback Constraint 甚至创建自定义约束。但是,有没有更好的方法?从表单字段接收到的字符串在被持久化到数据库之前应该如何验证其大小?
【问题讨论】:
标签: php validation symfony doctrine-orm