【问题标题】:CakePHP3: validate decimal inputCakePHP3:验证十进制输入
【发布时间】:2016-11-15 18:07:06
【问题描述】:

这可能是一个微不足道的问题,但我想不通。

我希望我的 price 值有 2 位小数。 CakePHP 应该验证这一点,但它没有。 CakePHP 只检查输入是否为数字并且不允许传递十进制值。

我希望它检查和传递像 2.222 这样的值。现在它只允许后者。

validationDefault 方法的一部分:

$validator
    ->decimal('price')
    ->allowEmpty('price');

我检查了 CakePHP API,发现 decimal() 方法描述:

decimal( float $check , integer|null $places null , string|null $regex null )

检查一个值是否为有效的小数。符号和指数都是 可选。

但是在这种情况下它不会将string 作为参数(并且CakePHP 在烘焙过程中自动将decimal() 分配给我的price 列),所以我想这就是decimal('price', 2) 不起作用的原因。

有什么想法吗?

请求编辑:

整个validationDefault方法:

public function validationDefault(Validator $validator)
{

   //$validator for other columns

  $validator
        ->allowEmpty('price')
        ->add('price', 'money', array('rule' =>
                          array('money', 'left'),
                          'message' => 'Please supply a valid monetary amount.'));

  return $validator;
}

我的输入字段是使用 HTML 帮助器创建的。

【问题讨论】:

    标签: php validation cakephp cakephp-3.0


    【解决方案1】:

    你应该用钱来验证价格

     $validator->notEmpty('price',array('message' => 'Please provide your amount'))     
                  ->add('price', 'money', array('rule' => array('money','left'),
                                                'message' => 'Please supply a valid monetary amount.'));
    

    你也可以试试这个

      $validator->notEmpty('amount',array('message' => 'Please provide your amount'))
                ->add('amount','numeric',array('rule' => 'numeric' ,'message'=> 'Please provide a valid amount'));
    

    【讨论】:

    • 感谢您的回复。我复制粘贴这行代码(并删除以前的decimal('price')),但它仍然只需要整数。
    • 试试去掉'left'它的可选项,如果不行,显示你的验证码
    • 嗯,这很尴尬。就像真的很尴尬。我没有更改数据库中的表设置以接受十进制值(我有decimal(10,0) 而不是decimal(10,2))。修复它并清除应用程序的缓存后,一切正常。我很抱歉这个愚蠢的问题,我感谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多