Laravel 检索旧复选框数组

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

我有一个复选框数组,它的值作为JSON存储在数据库中,我想获取旧值或存储在数据库中的值。这是我写的代码

它没有像我预期的那样工作,是否有处理此问题的最佳实践

<?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”=>“否”
] 
电话:
平板电脑:
苹果手机:
注意:在旧版中('您的姓名复选框必须使用')

  • ->首先,单击“编辑”“更新”“表单加载”
  • ->然后在加载表单后,旧输入为null,因此检查数据库值
  • ->提交表单后,如果验证失败,则使用旧输入重定向回表单
  • 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>