Php Laravel 4验证程序-验证两个字段之一
是否有任何通用的Laravel验证器选项允许我执行以下示例Php Laravel 4验证程序-验证两个字段之一,php,laravel,laravel-4,Php,Laravel,Laravel 4,是否有任何通用的Laravel验证器选项允许我执行以下示例 示例:我有两个文本框,其中至少一个必须填写。一个必须强制填写,但两个不必填写。在您的情况下,我认为稍微修改一下比扩展验证程序类更容易: if(empty(Input::get('textbox1')) && empty(Input::get('textbox2'))) { $v = Validator::make([], []); // Pass empty arrays to get Validator ins
示例:我有两个文本框,其中至少一个必须填写。一个必须强制填写,但两个不必填写。在您的情况下,我认为稍微修改一下比扩展
验证程序类更容易:
if(empty(Input::get('textbox1')) && empty(Input::get('textbox2'))) {
$v = Validator::make([], []); // Pass empty arrays to get Validator instance
// manually add an error message
$v->getMessageBag()->add('textbox2', 'Required if textbox1 is empty!');
// Redirect back with inputs and validator instance
return Redirect::back()->withErrors($v)->withInput();
}
因此,如果两个字段都为空,则在重定向后,第二个文本框(textbox2
)将显示错误消息,如果textbox1为空,则需要此消息代码>。但也可以使用条件验证:
$v = Validator::make([], []); // Pass empty arrays to get Validator instance
// If both fields are empty then textbox2 will be required
$v->sometimes('textbox2', 'required', function($input) {
return empty(Input::get('textbox1')) && empty(Input::get('textbox2'));
});
$messages = array( 'required' => 'Required if textbox1 is empty!' );
$v = Validator::make(Input::all(), $rules, $messages);
if($v->passes) {
// ...
}
在您的情况下,我认为稍微修改一下比扩展验证程序
类更容易:
if(empty(Input::get('textbox1')) && empty(Input::get('textbox2'))) {
$v = Validator::make([], []); // Pass empty arrays to get Validator instance
// manually add an error message
$v->getMessageBag()->add('textbox2', 'Required if textbox1 is empty!');
// Redirect back with inputs and validator instance
return Redirect::back()->withErrors($v)->withInput();
}
因此,如果两个字段都为空,则在重定向后,第二个文本框(textbox2
)将显示错误消息,如果textbox1为空,则需要此消息代码>。但也可以使用条件验证:
$v = Validator::make([], []); // Pass empty arrays to get Validator instance
// If both fields are empty then textbox2 will be required
$v->sometimes('textbox2', 'required', function($input) {
return empty(Input::get('textbox1')) && empty(Input::get('textbox2'));
});
$messages = array( 'required' => 'Required if textbox1 is empty!' );
$v = Validator::make(Input::all(), $rules, $messages);
if($v->passes) {
// ...
}
看起来Laravel有一些内置规则:required\u不带
和required\u不带
不带:foo,bar,。。。
只有当任何其他指定字段不存在时,验证中的字段才必须存在
不带所有内容的必填项:foo、bar、,。。。
只有当所有其他指定字段都不存在时,验证中的字段才必须存在
因此,在验证过程中,您需要:
$validator = Validator::make(
[
'textbox1' => Input::get('textbox1'),
'textbox2' => Input::get('textbox2'),
],
[
'textbox1' => 'required_without:textbox2',
'textbox2' => 'required_without:textbox1',
]
);
看起来Laravel有一些内置规则:required\u不带
和required\u不带
不带:foo,bar,。。。
只有当任何其他指定字段不存在时,验证中的字段才必须存在
不带所有内容的必填项:foo、bar、,。。。
只有当所有其他指定字段都不存在时,验证中的字段才必须存在
因此,在验证过程中,您需要:
$validator = Validator::make(
[
'textbox1' => Input::get('textbox1'),
'textbox2' => Input::get('textbox2'),
],
[
'textbox1' => 'required_without:textbox2',
'textbox2' => 'required_without:textbox1',
]
);
值得注意的是,当字段为空时,Laravel不会将输入传递给验证器。因此,如果不重写验证类的工作方式,似乎不可能创建一个好的规则来处理这种情况。这可能是最好的解决方案。required
是例外,如果您没有按要求设置字段,那么Laravel会假定空值或空值是可以的。这使得很难制定像require\u one:field2、field3
这样的规则。如果检查Validation类中的validate
方法,则会将其注释为so,除非规则暗示该属性是必需的,否则不会为缺少的值运行规则。
您实际谈论的是什么,请自己检查此代码。两者都有效。检查一个例子Laravel
不会传递空字段,这就是为什么它适用于required
。值得注意的是,当字段为空时,Laravel不会将输入传递给验证器。因此,如果不重写验证类的工作方式,似乎不可能创建一个好的规则来处理这种情况。这可能是最好的解决方案。required
是例外,如果您没有按要求设置字段,那么Laravel会假定空值或空值是可以的。这使得很难制定像require\u one:field2、field3
这样的规则。如果检查Validation类中的validate
方法,则会将其注释为so,除非规则暗示该属性是必需的,否则不会为缺少的值运行规则。
您实际谈论的是什么,请自己检查此代码。两者都有效。检查一个例子Laravel
不通过空字段,这就是为什么它适用于required
。只是澄清一下,“必须仅存在”表示“必须”。当设置其他字段时,正在验证为必需的字段(不带所有字段)也可以存在。只是为了澄清,“必须仅存在”表示“必须存在”。当设置其他字段时,正在验证为必需的字段(不带所有字段)也可以存在。