Laravel 5.1表单请求验证

时间:2015-12-06 21:12:20

标签: validation laravel-5.1

在laravel中创建手动验证器时,您可以附加在验证完成后运行的回调,如下所示:

$validator = Validator::make(...);

$validator->after(function($validator) {
   if (!Auth::validate(['email' => Auth::user()->email, 'password' => $this->input('old_password')]))
   {
       $validator->errors()->add('old_password', 'Invalid password');
   }
});

如何在表单请求中执行相同操作,即在下面的表单请求示例中添加上述回调函数的位置?

class AccountRequest extends Request
{
     public function authorize()
     {
          return true;
     }

     public function rules()
     {
        return [
            'new_password' => 'required|confirmed|min:6';
            'old_password' => 'required';
        ];
     }

}

2 个答案:

答案 0 :(得分:0)

参考评论,您需要验证旧密码是否等于DB中的现有字段,以及新密码=确认密码。

要实现这一目标,请首先为旧密码构建客户验证器:

<?php

namespace App\Providers;

use Validator;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Validator::extend('existing', function($attribute, $value, $parameters, $validator) {
            return  \Hash::check($value, User::find($parameters[0])->password);
        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

然后在您的表格申请中:

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class FormRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'old' => 'existing:'.\Auth::user()->id,
            'password' => 'confirmed|required_with:old'
        ];
    }
public function messages()
{
    return [
        'old.existing' => 'Wrong old password'
    ];
}


}

答案 1 :(得分:0)

您可以尝试添加public function after($request),并检查是否有效。