使用AppServiceProvider boot()方法在laravel 5.4中进行自定义表单验证

时间:2019-02-04 17:22:47

标签: laravel validation laravel-5 php-7

目前,我有一个正在验证的表格,如下所示:

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        \Validator::extend('custom_validation',function($attribute, $value, $parameters){
             //validation logic
      });
    }
...

但是有没有办法避免将这种方法放在AppServiceProvider中(或为此提供的任何服务)?

例如,为了简化起见,我是否可以将其插入控制器类中的某个位置?

我喜欢使用制作请求类(扩展FormRequest)的变体,但不确定如何将自定义方法添加到请求类。

任何建议将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

将验证规则分解为一个实现Illuminate\Contracts\Validation\Rule合同的类。 (请参阅有关“使用规则对象”的部分 1 。)

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class CustomValidation implements Rule
{
    public function passes($attribute, $value) 
    {
        // validation logic
    }

    public function message()
    {
        return 'validation error';
    }
}

然后有一个自定义表单请求,扩展了Illuminate\Foundation\Http\FormRequest 2

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use App\Rules\CustomValidation;

class CustomFormRequest extends FormRequest
{

    public function rules()
    {
        return [
            // include rules for other fields
            'custom' => new CustomValidation,
        ];
    }
}

在自定义表单请求中声明的规则通过在控制器方法上提示请求来在相关控制器中进行验证

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class CustomActionController extends Controller
{

    protected function create(CustomFormRequest $request)
    {

    }
}