我用symfony 2创建了一个表单,但我的浏览器Internet Explorer 9(在vista下运行)不支持HTML5。所以我收到此错误消息: 发生异常:SQLSTATE [23000]:完整性约束违规:1048列'name'不能为空。
我尝试过这个解决方案:
{# src/Acme/DemoBundle/Resources/views/Default/new.html.twig #}
{{ form(form, {'attr': {'novalidate': 'novalidate'}}) }}
但它没有改变任何东西!
表单的提交完全适用于Firefox。有没有人为IE9提供真正的详细解决方案?
由于
答案 0 :(得分:3)
基于浏览器的验证对于为用户提供即时反馈非常有用,但您始终需要重新验证服务器端的所有内容。如您所发现,并非所有浏览器都支持验证。此外,用户可以轻松绕过浏览器验证并将虚假信息发送回服务器。
向下滚动到此处的验证部分:http://symfony.com/doc/current/book/forms.html
想要评论我的答案的人应该使用评论功能。或者自己做出答案。
答案 1 :(得分:1)
novalidate属性强制所有浏览器绕过HTML5验证。但正如已经说过的,客户端验证还不够。当您实际阅读浏览器告诉您的错误消息时,请在其中注明单词SQLSTATE
。 SQL在正常的symfony应用程序中运行在服务器端,因此错误发生在服务器上,而不是客户端上。
您应该向实体成员添加断言注释,以在服务器上验证它们。对于属性$name
,最简单的形式可能如下所示:
/**
* @var string
* @Assert\NotBlank()
*/
private $name;
然后不要忘记断言的导入:
use Symfony\Component\Validator\Constraints as Assert;
当然,您也可以使用其他方式来定义验证规则,例如xml或yml config。有关详细信息,请参阅specific section in the docs。