Laravel 检索旧复选框数组
我有一个复选框数组,它的值作为JSON存储在数据库中,我想获取旧值或存储在数据库中的值。这是我写的代码 它没有像我预期的那样工作,是否有处理此问题的最佳实践Laravel 检索旧复选框数组,laravel,laravel-5,laravel-5.1,laravel-5.2,Laravel,Laravel 5,Laravel 5.1,Laravel 5.2,我有一个复选框数组,它的值作为JSON存储在数据库中,我想获取旧值或存储在数据库中的值。这是我写的代码 它没有像我预期的那样工作,是否有处理此问题的最佳实践 <?php $savedDevices = json_decode(Auth::user()->devices, true);?> <input type="checkbox" name="devices[Android Phone]" value="1" {{(old('devices') !== null &am
<?php $savedDevices = json_decode(Auth::user()->devices, true);?>
<input type="checkbox" name="devices[Android Phone]" value="1" {{(old('devices') !== null && array_key_exists("Android Tablet", old('devices')) ||array_key_exists("Android Tablet", $savedDevices) )?"checked":""}}> Android Phone </label>
<input type="checkbox" name="devices[Android Tablet]" value="1" {{(old('devices') !== null && array_key_exists("Android Tablet", old('devices')) ||array_key_exists("Android Tablet", $savedDevices) )?"checked":""}}> Android Tablet </label>
<input type="checkbox" name="devices[iPhone]" value="1" {{(old('devices') !== null && array_key_exists("iPhone", old('devices')) ||array_key_exists("iPhone", $savedDevices) )?"checked":""}}> iPhone </label>
<input type="checkbox" name="devices[iPad]" value="1" {{(old('devices') !== null && array_key_exists("iPad", old('devices')) ||array_key_exists("iPad", $savedDevices) )?"checked":""}}> iPad </label>
安卓手机
安卓平板电脑
苹果手机
iPad
试试这个
<?php $old_devices = old('devices', []); ?>
<input type="checkbox" name="devices[Android Phone]" value="1" {{array_key_exists("Android Tablet", $old_devices) || array_key_exists("Android Tablet", $savedDevices) ? "checked":""}}> Android Phone </label>
安卓手机
如果解码的json可能如下所示
$savedDevices = [
'phone' =>'yes',
'tablet' => 'yes',
'iphone' => 'no'
]
<label>
Phone :<input type="checkbox"
{{($savedDevices->phone == "yes") ? "checked":"" }} name="phone">
Tablet :<input type="checkbox"
{{($savedDevices->tablet == "yes") ? "checked":"" }} name="tablet">
Iphone :<input type="checkbox"
{{($savedDevices->iphone == "yes") ? "checked":"" }} name="iphone">
</label>
$savedDevices=[
“电话”=>“是”,
“平板电脑”=>“是”,
“iphone”=>“否”
]
电话:电话==“是”)?“选中”:“}}name=“phone”>
平板电脑:平板电脑==“是”)?“选中”:“}}name=“tablet”>
Iphone:Iphone==“是”)?“选中”:“}}name=“iphone”>
根据以上$savedDevices data,前两个复选框被选中,因为值=是,而iphone复选框被取消选中,因为其值不等于是
现在,如果要更改phone和tablet的值,请在使用withInput($request->all())时取消复选框并提交值,然后可以在表单中使用old。
在控制器中
$validator = \Validator::make($data, Distributors::rules($request->id));
if (!$validator->passes()) {
return redirect()->back()->withInput($request->all())->withErrors($validator->errors());
}
以形式
$savedDevices = [
'phone' =>'yes',
'tablet' => 'yes',
'iphone' => 'no'
]
<label>
Phone :<input type="checkbox"
{{(old('phone') == 'yes') ? "checked":"" }} name="phone">
Tablet :<input type="checkbox"
{{(old('tablet') == "yes") ? "checked":"" }} name="tablet">
Iphone :<input type="checkbox"
{{(old('iphone') == "yes") ? "checked":"" }} name="iphone">
</label>
$savedDevices=[
“电话”=>“是”,
“平板电脑”=>“是”,
“iphone”=>“否”
]
电话:
平板电脑:
苹果手机:
注意:在旧版中('您的姓名复选框必须使用')
Phone:tablet==“打开”)?“选中”:“}}”
@恩迪夫
name=“phone”>
这是对我有用的
<?php $savedDevices = json_decode(Auth::user()->devices, true);?>
{{$checked = ""}}
<!-- Check if it is a post back-->
<?php $postBack = old()?>
@if(empty($postBack))
<!-- First Request, get data from the DB -->
@if(array_key_exists('Android Phone',$savedDevices))
<?php $checked = "checked";?>
@endif
@else
<!-- Update attempt has happend -->
@if(array_key_exists('Android Phone',old('devices',[])))
<?php $checked = "checked";?>
@else
<?php $checked = "";?>
@endif
@endif
<label>
<input type="checkbox" name="devices[Android Phone]" value="1" {{$checked}} > Android Phone </label>
{{$checked=”“}
@if(空($postBack))
@如果(数组键存在('Android Phone',$savedDevices))
@恩迪夫
@否则
@如果(array_key_存在('Android Phone',old('devices',[]))
@否则
@恩迪夫
@恩迪夫
安卓手机
我尝试过,它在old不存在时引发异常这就是为什么我检查它是否存在Transge old helper从不引发异常如果输入不存在,它将返回null您正在使用的laravel的版本是什么?array_key_exists是引发异常的,因为old return nullI正在使用最新版本的Anks,验证期间如何保留旧值的问题,此解决方案将不显示旧值您是否正在创建表单或更新formif(!$validator->passs()){return redirect()->back()->withInput($request->all())->withErrors($validator->errors());}表单正在更新此解决方案确实有效,我的观点是,我们可以使用阵列设备[Android Phone],而不是单独使用每个元素。我不想在这上面花太多时间,但我只是想知道
<?php $savedDevices = json_decode(Auth::user()->devices, true);?>
{{$checked = ""}}
<!-- Check if it is a post back-->
<?php $postBack = old()?>
@if(empty($postBack))
<!-- First Request, get data from the DB -->
@if(array_key_exists('Android Phone',$savedDevices))
<?php $checked = "checked";?>
@endif
@else
<!-- Update attempt has happend -->
@if(array_key_exists('Android Phone',old('devices',[])))
<?php $checked = "checked";?>
@else
<?php $checked = "";?>
@endif
@endif
<label>
<input type="checkbox" name="devices[Android Phone]" value="1" {{$checked}} > Android Phone </label>