必填字段不能使用symfony表单在Internet Explorer 9上工作

时间:2013-12-03 20:07:57

标签: html5 symfony internet-explorer-9

我用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提供真正的详细解决方案?

由于

2 个答案:

答案 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