gpt4 book ai didi

validation - laravel : sanitize request data before validation

转载 作者:行者123 更新时间:2023-12-03 19:43:35 25 4
gpt4 key购买 nike

有一个UpdateUserRequest表单请求,用于根据rules mathod中定义的规则验证字段值。默认情况下,它具有rules()和authorize()方法。我想防止验证和更新空白字段(例如password)。

在规则中使用sometimes没什么用,因为html输入将出现在POST请求中,即使它们为空。

array:6 [▼
"_method" => "PATCH"
"_token" => "Cz79rRez2f6MG0tTU17nVwXD0X1lNGH1hA7OORjm"
"name" => "john"
"email" => "mymail@gmail.com"
"password" => ""
"password_confirmation" => ""

]

因此,在规则中使用 sometimes之前,我应该删除POST请求的空键。
问题是:清除Request数组的最佳位置在哪里?
是否有任何laravel内置方法来管理此类情况?

P.S :解决方案:
@Bogdon解决方案仍然有效并且可行,但是 here采用了另一种简单,简洁的解决方案:
只是在表单请求中覆盖 all()方法
 class RegistrationRequest extends Request
{

...

public function all()
{
$attributes = parent::all();

if(isset($attributes['password']) && empty($attributes['password']))
{
unset($attributes['password']);
}
$this->replace($attributes);

return parent::all();

}

...

}

最佳答案

为了完成这项工作,您需要修改App\Http\Requests\Request类的内容,以提供一种清理输入的方法(从this Laracasts post提取的类代码):

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

abstract class Request extends FormRequest
{
/**
* Validate the input.
*
* @param \Illuminate\Validation\Factory $factory
* @return \Illuminate\Validation\Validator
*/
public function validator($factory)
{
return $factory->make(
$this->sanitizeInput(), $this->container->call([$this, 'rules']), $this->messages()
);
}

/**
* Sanitize the input.
*
* @return array
*/
protected function sanitizeInput()
{
if (method_exists($this, 'sanitize'))
{
return $this->container->call([$this, 'sanitize']);
}

return $this->all();
}
}

之后,您只需要在 sanitize类中编写add UpdateUserRequest方法即可,该方法会在输入为空时从输入中删除 password字段:

public function sanitize()
{
if (empty($this->get('password'))) {
// Get all input
$input = $this->all();
// Remove the password field
unset($input['password']);
// Replace the input with the modified one
$this->replace($input);
}

return $this->all();
}

现在,将 sometimes规则用于密码字段将起作用:

public function rules()
{
return [
// Other rules go here
'password' => 'sometimes|required|confirmed'
];
}

关于validation - laravel : sanitize request data before validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35562994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com