Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 表单复选框字段值未传递给Laravel控制器_Php_Forms_Laravel_Laravel 5 - Fatal编程技术网

Php 表单复选框字段值未传递给Laravel控制器

Php 表单复选框字段值未传递给Laravel控制器,php,forms,laravel,laravel-5,Php,Forms,Laravel,Laravel 5,在我的注册表中,我有一个复选框,用户可以在其中接受接收新闻稿 在create函数中,我想显示所有传递的数据: protected function create(array $data) { dd($data); } “我的复选框”字段的名称是“时事通讯”。当我执行dd()时,我没有得到新闻稿的值,只得到了:name、email和password 如果我将此新闻稿添加到Validator,则会显示它 protected function validator(array $data) {

在我的注册表中,我有一个复选框,用户可以在其中接受接收新闻稿

create
函数中,我想显示所有传递的数据:

protected function create(array $data)
{
    dd($data);
}
“我的复选框”字段的名称是“时事通讯”。当我执行
dd()
时,我没有得到新闻稿的值,只得到了:
name
email
password

如果我将此新闻稿添加到Validator,则会显示它

protected function validator(array $data)
{
    return Validator::make($data, [
        'name'       => 'required|max:255',
        'email'      => 'required|email|max:255|unique:users',
        'password'   => 'required|min:6|confirmed',
        'newsletter' => 'required',
    ]);
}

现在,当我执行
dd()
时,它被传递,但我不希望该复选框是
必需的
。它应该是可选的。我应该在Validator或?

中更改某些内容吗?

您的
时事通讯
字段是一个复选框。提交html表单且未选中复选框时,此字段在发布的数据中不可用。如果选中该复选框,则该复选框将可用。这是默认的html行为,对此您无能为力

要检查代码中是否已选中该复选框,可以使用以下选项:

$checked = array_key_exists('newsletter', $data);

不管后端是什么,当复选框未选中时,其值不会作为请求的一部分发送到服务器。这就是浏览器的工作原理,这就是为什么在转储请求时,您不会看到
新闻稿
字段的原因

但是,当您使用Laravel的验证器并在规则中提及该字段时,Laravel会为您执行该操作并设置其值。要使其不是必需的,请使用
有时
规则

这样做只是为了倾销数据。但是,在实现真正的逻辑时,您希望使用给定的请求实例、facade或helper,而不是转储数据,这将为不存在的参数返回一个虚假值。因此,不添加额外的规则就可以了

或者,您可以为
时事通讯
字段设置一个默认值,确保如果数据不存在,新注册将以所需的默认状态进行



顺便说一下,您希望确保您的控制器方法接受的是
请求
实例而不是数组。

也显示您的输入,以便我们更好地理解我同意使用
使用照亮\Http\Request请求实例,而不是数组$data。