2017-10-06 139 views
0

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

我表单数据发送给该函数在它的位指示:

public function store(UserRequest $request) 
{ 

    return redirect(route('users.create')); 
} 

进行验证创建在

应用一类\ HTTP \请求\面板\用户\ UserRequest;

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

它的工作原理。

但我怎么能验证之前更改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') { 

它的工作原理if($this->method() == 'POST') {之前,但它不是影响验证或old()功能

回答

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')); 
} 

又见https://laravel.com/docs/5.5/validation

+0

这难道不是可能在我的方法上做到这一点?请参阅我的更新。 – Maria

0

覆盖的FormRequest

因此,在应用程序的prepareForValidation()方法\ HTTP \请求\面板\用户\ UserRequest:

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