首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果没有选择选项,Laravel将忽略select输入验证。

如果没有选择选项,Laravel将忽略select输入验证。
EN

Stack Overflow用户
提问于 2017-09-25 12:43:23
回答 3查看 15K关注 0票数 7

我有一个包含一些字段的表单,我想使用Laravel的validate()方法来验证这些字段。

代码语言:javascript
运行
复制
public function postSomething(Request $req) {

    ...

    $this->validate($req, [
        'text_input' => 'required',
        'select_input' => 'required'
    ]);

    ...

}

问题是,如果提交表单时没有从select输入中选择一个选项,则在请求中忽略它,而Laravel不验证它,尽管它是用required验证规则添加到规则集中的。正在正确验证空文本输入。

代码语言:javascript
运行
复制
+request: ParameterBag {#42 ▼
  #parameters: array:1 [▼
    "text_input" => ""
    "_token" => "TCDqEi2dHVQfmc9HdNf8ju1ofdUQS6MtDBpUMkl7"
  ]
}

如您所见,如果请求参数为空,则请求参数中缺少select_input

下面是我选择的输入的HTML代码:

代码语言:javascript
运行
复制
<select class="form-control" name="select_input">
    <option disabled selected>Please select...</option>
    <option value="val1">Value 1</option>
    <option value="val2">Value 2</option>
</select>

是否有一种方法可以使规则集中的所有字段都有效,即使其中一些字段不在请求中?

来自Laravel 5.1验证文档:

所需 验证中的字段必须存在于输入数据中,而不是空的。字段被认为“空”是下列条件之一为真:值为null。该值是一个空字符串。该值是空数组或空可数对象。该值是一个上传的文件,没有路径。

我使用的是Laravel5.1,所以present方法不可用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-25 12:48:59

您的html应该如下所示

代码语言:javascript
运行
复制
<select class="form-control" name="select_input">
    <option value="" selected >Please select...</option>
    <option value="val1">Value 1</option>
    <option value="val2">Value 2</option>
</select>

$this->validate($req, [
        'text_input' => 'required',
        'select_input' => 'required',
    ]);

如果您的复选框值是整数,则可以将requiredinteger一起使用,如

代码语言:javascript
运行
复制
$this->validate($req, [
    'text_input' => 'required',
    'select_input' => 'required|integer',
]);

或者,如果该复选框的选项有限,则可以使用

代码语言:javascript
运行
复制
'select_input' => "required|in:val1,val2,val3",
票数 8
EN

Stack Overflow用户

发布于 2017-09-25 12:46:18

您禁用了它的选项,所以它不会通过您的表单发送任何内容。

将复选框更改为

代码语言:javascript
运行
复制
<select class="form-control" name="select_input">
    <option value="">Please select...</option>
    <option value="val1">Value 1</option>
    <option value="val2">Value 2</option>
</select>
票数 1
EN

Stack Overflow用户

发布于 2017-09-25 13:29:13

有几个选项我可以推荐:

  • 在不使用主计长扩展的验证的情况下手动验证请求,即: //验证器外观$验证器= Validator::make ($request->all(),//规则此处); 这样,您就可以监视哪些字段被传递,哪些字段没有被传递。
  • 其次,为select列表设置一个默认值,并在Controller中验证时检查该值,也就是说,如果您有此默认值,则不会选择任何选项。您肯定只会在Controller中提交字段。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46405564

复制
相关文章

相似问题

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