我正在laravel 5.8中创建应用程序
我在价格字段中使用http://autonumeric.org/,以便用逗号分隔每三位数。因此,对于超过3位数字的数字,将带有逗号。
如果我输入的数字超过3位,则整数输入验证失败!显然是因为逗号。因此,我尝试在验证之前清理输入。但是问题仍然存在!
我尝试将输入的清理版本转换为int,但仍然无法正常工作!
这是我的请求类的样子:
public function rules()
{
$this->sanitize();
return [
'base_price' => 'required|integer', //it fails if I enter a number with more than 3 digits!
];
}
public function sanitize()
{
$input = $this->all();
//sanitize
$input['base_price'] = filter_var($input['base_price'], FILTER_SANITIZE_NUMBER_INT);
//casting
$input['base_price'] = (int) $input[base_price'];
$this->replace($input);
}
答案 0 :(得分:0)
对于那些可能遇到相同问题的人,我将回答我自己的问题。
非常感谢@ Sohel0415在评论中的帮助,我能够解决此问题。
如本问题所述:Modify input before validation on Laravel 5.1。在验证之前,在sanitize()
中调用rule()
不会更改输入。它清除并修改了输入,但是此修改仅在验证之后使用。这是因为输入已经加载以进行验证。
FormRequest类实际上使用validationData()
方法来访问将要验证的数据,这是在调用rule()
之前发生的。
protected function validationData() //the method inside Illuminate\Foundation\Http\FormRequest;
{
return $this->all();
}
因此,如果我们仅在请求类中覆盖此方法,则可以解决此问题。
protected function validationData()
{
$this->sanitize();
return parent::validationData(); // TODO: Change the autogenerated stub
}