Laravel 表单请求多个相同类型的验证规则
Laravel Form Request several validation rules of same type
我有一个表单请求验证文件,它检查输入字段是否为空 ('required')
然后它的值是否存在于数据库中 table 'table1'
.
我想将第二个存在规则添加到同一个输入字段,return 如果不满足第二个存在验证规则,则显示一条消息:
public function rules()
{
return [
'tour' => 'required|exists:table1,id|//another exists: table2, id//'
];
}
public function messages()
{
return [
'tour.required' => 'Message 1!',
'tour.exists:table1,id' => 'Message 2!',
'tour.//another exists: table2, id//' => 'Message 3!'
];
}
目前只有第二条规则有效。有什么想法吗?:)
先谢谢大家了!
在这种情况下,您可以编写自定义验证规则。例如,让我们创建一个名为 CustomValidator 的 class(将他放在 'App\Services' 或其他您想要的文件夹中)。
CustomValidator.php
namespace App\Services;
class CustomValidator {
public function myexistsValidate($attribute, $value, $parameters, $validator) {
for ($i = 0; $i < count($parameters); $i += 2) {
$count = \DB::table($parameters[$i])->where($parameters[$i + 1], $value)->count();
if (!$count) {
return false;
}
}
return true;
}
}
我们创建了一个名为 myexists
的新规则。此规则可以接受一对参数,以逗号分隔,如下所示:'myexists:table1,searchfield1,table2,searchfield2...'`
我写了这个规则的非常简单的例子,你可以添加一些方法或其他验证...
接下来您必须在 AppServiceProvider 的方法 boot
中注册您自己的验证规则(您作为第一个参数放置的字符串将是新规则的名称):
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use \Validator;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('myexists', 'App\Services\CustomValidator@myexistsValidate');
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
接下来在您的 FormRequest 中放置这样的代码:
public function rules()
{
$rules = [
'id' => 'myexists:tableName1,field1,tableName2,field2',
];
return $rules;
}
您可以为此规则添加验证消息,例如在您的 lang\en\validation.php
文件中 'myexists' => 'Field :attribute must exists in all described tables.'
我有一个表单请求验证文件,它检查输入字段是否为空 ('required')
然后它的值是否存在于数据库中 table 'table1'
.
我想将第二个存在规则添加到同一个输入字段,return 如果不满足第二个存在验证规则,则显示一条消息:
public function rules()
{
return [
'tour' => 'required|exists:table1,id|//another exists: table2, id//'
];
}
public function messages()
{
return [
'tour.required' => 'Message 1!',
'tour.exists:table1,id' => 'Message 2!',
'tour.//another exists: table2, id//' => 'Message 3!'
];
}
目前只有第二条规则有效。有什么想法吗?:)
先谢谢大家了!
在这种情况下,您可以编写自定义验证规则。例如,让我们创建一个名为 CustomValidator 的 class(将他放在 'App\Services' 或其他您想要的文件夹中)。
CustomValidator.php
namespace App\Services;
class CustomValidator {
public function myexistsValidate($attribute, $value, $parameters, $validator) {
for ($i = 0; $i < count($parameters); $i += 2) {
$count = \DB::table($parameters[$i])->where($parameters[$i + 1], $value)->count();
if (!$count) {
return false;
}
}
return true;
}
}
我们创建了一个名为 myexists
的新规则。此规则可以接受一对参数,以逗号分隔,如下所示:'myexists:table1,searchfield1,table2,searchfield2...'`
我写了这个规则的非常简单的例子,你可以添加一些方法或其他验证...
接下来您必须在 AppServiceProvider 的方法 boot
中注册您自己的验证规则(您作为第一个参数放置的字符串将是新规则的名称):
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use \Validator;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('myexists', 'App\Services\CustomValidator@myexistsValidate');
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
接下来在您的 FormRequest 中放置这样的代码:
public function rules()
{
$rules = [
'id' => 'myexists:tableName1,field1,tableName2,field2',
];
return $rules;
}
您可以为此规则添加验证消息,例如在您的 lang\en\validation.php
文件中 'myexists' => 'Field :attribute must exists in all described tables.'