首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2验证将无效整数更改为0

问Symfony2验证将无效整数更改为0
EN

Stack Overflow用户
提问于 2012-09-28 10:22:31
回答 2查看 2.1K关注 0票数 2

我向一个表单添加了验证,发现在某些情况下,它会丢失我提供给它的无效数据,而不是保存0。底部的输出显示,如果我将纬度作为'zzzzzz‘发布,这显然不是一个数字,也不是-90到90之间的数字,表单将被声明为有效,并使用值0保存。

既然我已经声明了输入必须是一个数字,怎么会发生这种情况呢?

ProxyType.php buildForm():

代码语言:javascript
复制
$builder
        ->add('siteName', null, array('label' => 'Site name'))
        ....
        ->add('latitude', 'number', array('label' => 'Latitude'))
        ->add('longitude', 'number', array('label' => 'Longitude'))
        ....
    ;

ProxyController.php createAction:

代码语言:javascript
复制
    ....
    $postData = $request->request->get('niwa_pictbundle_proxytype');
    $this->get('logger')->info('Posted latitude = '.$postData['latitude']);

    $form    = $this->createForm(new ProxyType(), $entity);
    $form->bindRequest($request);

    if ($form->isValid()) {
        $this->get('logger')->info('Form declared valid : latlong ('.$entity->getLatitude().','.$entity->getLongitude().')');
        ....

validation.yml:

代码语言:javascript
复制
Acme\PictBundle\Entity\Proxy:
properties: 
    longitude:
        - Min: { limit: -180 }
        - Max: { limit: 180 }
    latitude:
        - Max: { limit: 90 }
        - Min: { limit: -90 }

输出:

代码语言:javascript
复制
[2012-09-28 02:05:30] app.INFO: Posted latitude = zzzzzz [] []
[2012-09-28 02:05:30] app.INFO: Form declared valid : latlong (0,0) [] []
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-28 19:58:25

实际情况是,您使用的不是数字验证,而是将表单字段绑定为数字,因此当您将请求绑定到表单时,它会将字符串转换为数字(对于任何没有数字开头的字符串,该数字将为0)。表单域是一个数字意味着它希望以数字的形式出现,或者更确切地说,应该在这种事情的前端进行一些验证,或者前端不应该允许设置非数字。

我认为您似乎想要的是一个带数字验证的文本类型的表单字段。

对于实际验证,请使用约束类型(除了最小值和最大值之外)。

http://symfony.com/doc/current/book/validation.html

http://symfony.com/doc/current/reference/constraints/Type.html

票数 5
EN

Stack Overflow用户

发布于 2012-09-28 17:28:23

在您的validation.yaml中添加以下constarins。然后,只有它验证了字段。在您的表单类型中,您只需提到您需要哪种类型(数量)的小部件。这还不够。因此,请尝试将此验证添加到

Validation.yml

代码语言:javascript
复制
latitude
    - Type:
        type: integer
        message: latitude should be numeric
longitude
    - Type:
        type: integer
        message: longitude should be numeric

希望这能有所帮助。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12632756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档