为通用请求字段全局定义规则

时间:2019-01-28 16:03:30

标签: laravel validation

在我的Laravel 5.7应用程序中,我有几个请求来收集常用信息-姓名,电子邮件,电话等。

是否有一种有效的方法来为应用程序级别上与请求级别相对应的这些通用或“全局”字段定义验证规则,以便对其进行更好的管理?

当前,更新验证意味着触摸每个请求。

为每个字段创建规则并将其导入每个请求的开头的简短过程,我看不到一种完美的方法来实现。

2 个答案:

答案 0 :(得分:1)

也许您可以使用中间件来实现:https://laravel.com/docs/5.7/middleware

我没有一个例子,但是我认为做这样的事情是可以的:

首先创建一个中间件:

php artisan make:middleware CheckCommonFields

然后验证您的请求是否包含“公共请求字段”

public function handle($request, Closure $next)
{
    if ($request->input('email')) {
        $validator = Validator::make($request->all(), [
            'email' => 'required|email',
        ]);
        if ($validator->fails()) {
            return redirect('somewhere')
                    ->withErrors($validator)
                    ->withInput();
        }
    } 

    return $next($request);
}

将中间件添加到您的Kernel.php $routeMiddleware

protected $routeMiddleware = [
        ...
        'commonFields' => \App\Http\Middleware\CheckCommonFields::class,
    ];

最后,在web.php(或api.php或what.php)中添加这些验证规则所涉及的路由的中间件:

Route::post(/whatever/you/want, 'WhateverController@action')->name('whatever')->middleware('commonFields');

答案 1 :(得分:1)

嗨,我希望这是您要的东西,如果没有的话,我们深表歉意。

对于常见验证,我创建了一个请求表单-Laravel docs - HTTP requests

如果使用类似php artisan make:request ExampleFormRequest的名称,则会在Http文件夹中创建相关的文件夹“请求”。

您可以在文件ExampleFormRequest中指定规则,然后在控制器中多次验证同一内容

例如

    'name' => 'required|unique:posts|max:255',
    'email' => 'required|email|unique:users',
    'address' => 'required|string|max:500'

等,您可以像这样在Method参数中调用Request表单:

public function store(ExampleFormRequest $request)
{
    ...
}

我希望这会有所帮助:)