【发布时间】:2019-06-21 16:28:54
【问题描述】:
在我的 Laravel 5.7 应用程序中,我有几个收集常用信息的请求 - 姓名、电子邮件、电话等。
是否有一种有效的方法可以在应用程序级别为这些通用或“全局”字段定义验证规则,以便更好地管理它们?
目前,更新验证意味着触及每个请求。
没有为每个字段创建规则并在每个请求的开头导入它们,我没有看到一种优雅的方式来实现这一点。
【问题讨论】:
标签: laravel validation
在我的 Laravel 5.7 应用程序中,我有几个收集常用信息的请求 - 姓名、电子邮件、电话等。
是否有一种有效的方法可以在应用程序级别为这些通用或“全局”字段定义验证规则,以便更好地管理它们?
目前,更新验证意味着触及每个请求。
没有为每个字段创建规则并在每个请求的开头导入它们,我没有看到一种优雅的方式来实现这一点。
【问题讨论】:
标签: laravel validation
也许您可以使用中间件来实现: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或whatever.php)中添加这些验证规则所涉及的路由的中间件:
Route::post(/whatever/you/want, 'WhateverController@action')->name('whatever')->middleware('commonFields');
【讨论】:
您好,我希望这是您正在寻找的,如果不是,请道歉。
对于常见的验证,我创建了一个请求表单 - Laravel docs - HTTP requests
如果您使用 php artisan make:request ExampleFormRequestthis 之类的内容,则会在 Http 文件夹中创建相关文件夹“Requests”。
在您的文件 ExampleFormRequest 中,您可以指定规则,而不是在控制器中多次验证同一事物
例如
'name' => 'required|unique:posts|max:255',
'email' => 'required|email|unique:users',
'address' => 'required|string|max:500'
等等,你可以像这样在方法参数中调用请求表单:
public function store(ExampleFormRequest $request)
{
...
}
我希望这会有所帮助:)
【讨论】: