【问题标题】:laravel - create validate with required_without and required_iflaravel - 使用 required_without 和 required_if 创建验证
【发布时间】:2019-10-08 10:33:40
【问题描述】:

如何为看起来像这样的表单创建验证:如果用户选择“旧车”单选按钮选项,他需要从下拉选择列表中选择汽车名称,然后他不必填写其余字段。如果用户选择“新车”单选按钮选项,他必须插入汽车名称和号码。如果汽车没有编号,用户需要选择复选框“没有编号的汽车”,然后他只需要输入汽车名称。现在它不像我想要的那样工作。

<form action="/action.php">
  <label for="exampleFormControlFile1">Cars:</label><br>
  <div id="option" role="radiogroup">          
  <input id="opt" type="radio" class="form-control form-control-sm" value="old" name="car" checked>Old car                  
 <input id="opt" type="radio" class="form-control form-control-sm" value="new" name="car">New car                  
 </div>
<div id="old_car">
{!! Form::select('car', $cars, null, ['class'=>'form-control form-control-sm form-control-chosen', 'placeholder' => 'Choose']) !!}
{!! $errors->first('bu', '<strong><p style="color:red;" class="help-block">:message</p></strong>') !!}
</div>
<div id="new_car">
<label for="exampleFormControlFile1">Car:</label><br>
<input class="form-control form-control-sm" name="name" type="text"><br>
<label for="exampleFormControlFile1">Car number:</label><br>
<input class="form-control form-control-sm" type="text" name="car_number" id="number"><br> 
{!! Form::checkbox('no_number', null, false,  ['class'=>'form-check-input', 'id'=>'car']); !!}
<label class="form-check-label" for="defaultCheck1">car without number</label>                
</div>              
<input type="submit" value="Submit">
</form>
class CarController

...

public function store(Request $request)
{
      $request->validate([            
            'car' => ['required_if:car,old', 'integer'],
            'name' => ['required_if:car,new', 'string'],
            'car_number' => ['required_if:car,new', 'required_without:no_number', 'unique:cars,c_number', 'digits_between:10,10'],

}

编辑 我忘了。现在,当我选择新车并发送完整的表格时,它会在下拉列表中显示错误,旧车的值必须是整数。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    验证规则中的顺序很重要,根据documentation

    在第一次验证失败时停止

    有时您可能希望停止运行验证规则 第一次验证失败后的属性。为此,分配 属性的保释规则:

    $request->validate([
        'title' => 'bail|required|unique:posts|max:255',
        'body' => 'required', ]);
    

    在此示例中,如果 title 属性上的 unique 规则失败,则 max 规则将不会被检查。规则将按顺序验证 他们被分配了。

    在您的情况下,第一条规则失败 'required_if:car,new', 您选择了新车单选按钮,但您没有为 car_number 提供值。

    所以要解决这个问题,你只需像这样颠倒规则的顺序:

    public function store(Request $request)
    {
          $request->validate([            
                'car' => ['required_if:car,old', 'integer'],
                'name' => ['required_if:car,new', 'string'],
                'car_number' => ['required_without:no_number', 'required_if:car,new', 
                                 'unique:cars,c_number', 'digits_between:10,10'],
    }
    

    【讨论】:

    • 现在,当我选择新车并选中复选框时,他显示 required_if:car,new 的错误。
    【解决方案2】:

    如果传入的 HTTP 请求包含“嵌套”字段数据,您可以使用“点”语法在验证规则中指定这些字段:

    $request->validate([
        'title' => 'required|unique:posts|max:255',
        'author.name' => 'required',
        'author.description' => 'required',
    ]);
    

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 1970-01-01
      • 2014-03-26
      • 2022-01-19
      • 2018-08-15
      • 2016-10-13
      • 2021-12-09
      • 2021-03-06
      • 2022-12-08
      相关资源
      最近更新 更多