在Laravel 5.5中验证之前更改$ request的值

Mar*_*ria 4 laravel laravel-validation laravel-5.5

我有一个表格route('users.create')

我将表单数据发送到该函数的contoller中:

public function store(UserRequest $request)
{

    return redirect(route('users.create'));
}
Run Code Online (Sandbox Code Playgroud)

为了验证,我在

App \ Http \ Requests \ Panel \ Users \ UserRequest;

class UserRequest extends FormRequest
{
    public function rules()
    {
        if($this->method() == 'POST') {
             return [
                 'first_name' => 'required|max:250',
Run Code Online (Sandbox Code Playgroud)

有用。

但是,如何first_name在验证之前(以及在保存到数据库之前)更改值?

(此外,如果验证失败,我想在 old('first_name')

更新资料

我尝试这样:

 public function rules()
    {
     $input = $this->all();


     $input['first_name'] = 'Mr '.$request->first_name;
     $this->replace($input);

     if($this->method() == 'POST') {
Run Code Online (Sandbox Code Playgroud)

它在之前有效,if($this->method() == 'POST') {但对验证或old()功能无效

小智 9

覆盖的prepareForValidation()方法FormRequest

因此在App\Http\Requests\Panel\Users\UserRequest

protected function prepareForValidation()
{
    if ($this->has('first_name'))
        $this->merge(['first_name'=>'Mr '.$this->first_name]);
}
Run Code Online (Sandbox Code Playgroud)


Web*_*ner 0

为什么不在控制器中进行验证?您可以在验证之前进行更改,然后再进行数据库操作。

public function store(Request $request)
{
    $request->first_name = 'Mr '.$request->first_name;

    Validator::make($request->all(), [
        'first_name' => 'required|max:250',
    ])->validate();

    // ToDo save to DB

    return redirect(route('users.create'));
}
Run Code Online (Sandbox Code Playgroud)

另请参阅https://laravel.com/docs/5.5/validation