【问题标题】:Laravel 5.1 - DRY Create/Edit form when using a JSON objectLaravel 5.1 - 使用 JSON 对象时创建/编辑表单
【发布时间】:2016-05-03 17:27:12
【问题描述】:

我有一个非常相似的创建表单和编辑表单,实际上它们之间只有一个关键区别,这就是我需要帮助的地方。

我想将表单提取成一个部分,这样我就不会重复自己,但是我有一点问题。

我正在将遗传学数组 (genetics[]) 作为 JSON 对象保存到我的数据库中,例如,它可能如下所示:

{
    "Bell-Albino":"BA",
    "Rainwater-Albino":"na",
    "Tremper-Albino":"na",
    "Murphys-Patternless":"mp",
    "Eclipse":"EC",
    "Marble-Eye":"na",
    "Blizzard":"b",
    "Mack-Snow":"na",
    "Super-Snow":"SS",
    "Gem-Snow":"na",
    "TUG-Snow":"na",
    "Line-Bred-Snow":"na",
    "Enigma":"EN",
    "White-and-Yellow":"WY",
    "Wildtype":"na",
    "Giant":"na"
}

下面是Bell-Albino 字段的代码摘录,向您展示如何在create 视图中设置其余部分。我必须为值设置键。在提交有错误时,Request::old() 会做它需要做的事情并绝对保留该值。这工作正常并且没有损坏:

<label for="genetics">Bell Albino</label>
<?php $options = array('na' => 'N/A', 'BA' => 'Visual', 'ba' => 'Recessive'); ?>
{!! Form::select(
    'genetics[Bell-Albino]', 
    $options, 
    Request::old('genetics[Bell-Albino]'), 
    array('class' => 'form-control')) 
!!}

同样,这里是来自edit 视图的同一段代码。再一次,这工作正常,但它不是 DRY,这是我所关心的。

<label for="genetics">Bell Albino</label>
<?php $options = array('na' => 'N/A', 'BA' => 'Visual', 'ba' => 'Recessive'); ?>
{!! Form::select(
    'genetics[Bell-Albino]', 
    $options, 
    $genetics[0]['Bell-Albino'], 
    array('class'=>'form-control')) 
!!}

为了在页面加载时正确显示/显示/选择遗传学数组值,我必须将 json_decode 我的字段值放入我的 form 上方的不同数组中:

<?php $genetics[] = json_decode($gecko->genetics, true); ?>

对于那些感兴趣的,所以你知道解码后的对象是什么样子的,这是$genetics的转储:

array:1 [▼
  0 => array:16 [▼
    "Bell-Albino" => "BA"
    "Rainwater-Albino" => "na"
    "Tremper-Albino" => "na"
    "Murphys-Patternless" => "mp"
    "Eclipse" => "EC"
    "Marble-Eye" => "na"
    "Blizzard" => "b"
    "Mack-Snow" => "na"
    "Super-Snow" => "SS"
    "Gem-Snow" => "na"
    "TUG-Snow" => "na"
    "Line-Bred-Snow" => "na"
    "Enigma" => "EN"
    "White-and-Yellow" => "WY"
    "Wildtype" => "na"
    "Giant" => "na"
  ]
]

现在从上面的 2 段代码中,您可以看到唯一真正的区别是我在哪里使用 Request::old()。是否有任何方法来实现将此表单与 JSON 对象一起使用的 DRY 方式?

【问题讨论】:

    标签: php arrays json laravel laravel-5.1


    【解决方案1】:

    无论您的“线索”是什么,告诉您它是编辑表单还是创建表单,请在不同的一行上的 ternary statement 中使用它:

    <label for="genetics">Bell Albino</label>
    <?php $options = array('na' => 'N/A', 'BA' => 'Visual', 'ba' => 'Recessive'); ?>
    {!! Form::select(
        'genetics[Bell-Albino]', 
        $options, 
        $isEdit ? $genetics[0]['Bell-Albino'] : Request::old('genetics[Bell-Albino]'), // here!
        array('class' => 'form-control')) 
    !!}
    

    例如,这可能在您的“创建”页面上:

    @include('my.form', ['isEdit' => false]);
    

    这可能在您的“编辑”页面上:

    @include('my.form', ['isEdit' => true]);
    

    其中my.form 包含上述Form::select

    【讨论】:

    • 其实这不是一个坏主意。我正在考虑这个,但我怀疑自己哈哈
    • 我一直在做这样的事情。去干!
    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 2014-05-15
    • 1970-01-01
    • 2015-12-17
    • 2013-08-20
    相关资源
    最近更新 更多