Php Laravel 4验证程序-验证两个字段之一

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

是否有任何通用的Laravel验证器选项允许我执行以下示例


示例:我有两个文本框,其中至少一个必须填写。一个必须强制填写,但两个不必填写。

在您的情况下,我认为稍微修改一下比扩展
验证程序类更容易:

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
。只是澄清一下,“必须仅存在”表示“必须”。当设置其他字段时,正在验证为必需的字段(不带所有字段)也可以存在。只是为了澄清,“必须仅存在”表示“必须存在”。当设置其他字段时,正在验证为必需的字段(不带所有字段)也可以存在。