Laravel - 两个输入值都不能没有如何验证?

时间:2014-11-12 13:42:30

标签: php validation laravel

我正在使用Laravel进行项目,并希望了解如何验证我面临的特定情况。如果可能的话,我想用Laravel的原生特性来做这件事吗?

我有一个表单有两个问题(作为下拉列表),答案可以是yes或no,但是如果两个下拉列表都等于no,它应该抛出验证错误,但它们都可以是

我已经检查了laravel文档,但是不确定在这里应用什么规则,如果有一个可以使用的话?在这种情况下,我是否需要编写自己的规则?

2 个答案:

答案 0 :(得分:0)

非常简单:

让我们说两个字段的名称分别是 foo bar

然后:

 // Validate for those fields like $rules = ['foo'=>'required', 'bar'=>'required'] etc

 // if validation passes, add this (i.e. inside if($validator->passes()))

 if($_POST['foo'] == 'no' && $_POST['bar'] == 'no')
 {
     $messages = new Illuminate\Support\MessageBag;
     $messages->add('customError', 'both fields can not be no');
     return Redirect::route('route.name')->withErrors($validator);
 }

检索时会出现错误消息。

如果您感到困惑,只需转储$error var并检查如何检索它。即使验证通过但在上面的代码中失败,它也不会与确实验证失败时发生的情况有任何区别。

答案 1 :(得分:0)

显然不知道你的表单字段是什么,但这应该有效。

这是使用有时()方法添加条件查询,如果相应的字段等于否,则字段值不应为no。

    $data = array(
        'field1' => 'no',
        'field2' => 'no'
    );

    $validator = Validator::make($data, array());
    $validator->sometimes('field1', 'not_in:no', function($input) {
        return $input->field2 == 'no';
    });
    $validator->sometimes('field2', 'not_in:no', function($input) {
        return $input->field1 == 'no';
    });

    if ($validator->fails()) {
        // will fail in this instance
        // changing one of the values in the $data array to yes (or anything else, obvs) will result in a pass
    } 

请注意,这只适用于Laravel 4.2 +