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。