【问题标题】:Laravel : make one form for both create and editLaravel:为创建和编辑制作一个表单
【发布时间】:2016-06-14 17:24:46
【问题描述】:

我有 2 个像往常一样的表单(edit.blade.php + create.blade.php) 我有一个 Model $product,它有很多关系,例如 $product->product_meta->price

对于直接价值 $product->name,我已将其添加到表单中,并且像魅力一样工作,没有任何问题:

1- 在创建中我添加了以下内容:

{!! Form::text('name_ar', old('name_ar') ,['class' => 'form-control']) !!}

2- 在编辑中,我还添加了以下内容,效果很好

{!! Form::text('name_ar', old('name_ar') ,['class' => 'form-control']) !!}

当涉及到关系时,这些不起作用:

{!! Form::text('name_ar', old('product_meta.price') ,['class' => 'form-control']) !!}
{!! Form::text('name_ar', old(['product_meta']['price']) ,['class' => 'form-control']) !!}

有什么想法吗? !

【问题讨论】:

  • 我会使用 if/else 来查看是否设置了关系 (product_meta->price)。如果是,将其传递给 old(),如果不是,则简单地默认为空字符串。
  • 我喜欢这种方法(也适用于 Laravel 5),它重复使用相同的表单进行编辑和创建:scotch.io/tutorials/…

标签: php laravel


【解决方案1】:

我在某些模型上这样做,但通常宁愿避免这样做,因为很多时候创建和更新的逻辑不同。

如果视图中没有该字段,则以下内容不起作用。

{!! Form::text('name_ar', old('product_meta.price') ,['class' => 'form-control']) !!}

old() 引用具有该名称的输入,因此如果该字段名为“name_ar”,则无法使用“product_meta.price”获取该字段的旧值。

但 old() 也接受第二个参数作为后备,因此您可以检查旧输入,然后如果不存在(未完成提交),则使用关系数据设置值,如下所示:

{!! Form::text('name_ar', old('name_ar', ( isset($product) ? $product->product_meta->price ,'') ) ,['class' => 'form-control']) !!}

上面将在上次提交时查找名为“name_arr”的旧输入,然后如果未找到(您尚未提交),将查看变量 $product 是否已设置(因此您正在编辑) ,而不是如果未设置,则将值设置为空 ''(您正在创建)

希望有帮助

干杯

【讨论】:

    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 2014-05-15
    • 2023-03-15
    • 1970-01-01
    • 2017-10-09
    • 2013-11-22
    • 2017-01-18
    • 2016-05-03
    相关资源
    最近更新 更多