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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (424)

我有一个表格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在验证之前(以及在DB中保存之前)更改值?

(同样,验证失败,我想看到新的数据 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()功能没有影响

提问于
用户回答回答于

覆盖的prepareForValidation()方法FormRequest

所以在App\Http\Requests\Panel\Users\UserRequest

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

为什么不在控制器中进行验证?在验证之前你可以改变一些东西,然后再做你的db。

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

扫码关注云+社区

领取腾讯云代金券