首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >required_if -使用required_without和laravel创建验证

required_if -使用required_without和laravel创建验证
EN

Stack Overflow用户
提问于 2019-10-08 18:33:41
回答 2查看 853关注 0票数 0

如果用户选择了'old car‘单选按钮选项,他需要从向下选择列表中选择汽车名称,然后他就不必填写剩下的字段了。如果用户选择“新车”单选按钮选项,他必须插入车名和车号。如果汽车没有编号,用户需要选中“没有编号的汽车”复选框,然后他将只需输入汽车名称。现在,它并不像我希望的那样工作。

代码语言:javascript
复制
<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>
代码语言:javascript
复制
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'],

}

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

EN

回答 2

Stack Overflow用户

发布于 2019-10-08 18:55:16

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

在第一次验证失败时停止

有时,您可能希望在第一次验证失败后停止对属性运行验证规则。要执行此操作,请将保释规则分配给属性:

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

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

在您的例子中,第一条规则失败了,您选择了new 'required_if:car,new',单选按钮,但是没有给出car_number的值。

因此,要解决这个问题,您只需颠倒规则的顺序,如下所示:

代码语言:javascript
复制
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'],
}
票数 0
EN

Stack Overflow用户

发布于 2022-01-09 11:04:19

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

代码语言:javascript
复制
$request->validate([
    'title' => 'required|unique:posts|max:255',
    'author.name' => 'required',
    'author.description' => 'required',
]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58284647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档