【问题标题】:What's the proper way to have a default value only for CREATE view?为 CREATE 视图设置默认值的正确方法是什么?
【发布时间】:2016-11-19 20:25:40
【问题描述】:

我想为我的模型属性设置一个默认值:

_form.blade.php 代码:{!! Form::text('attribute','Default Value') !!}

由于_form.blade.phpcreate.blade.phpedit.blade.php 共享,因此两个视图始终显示默认值:Default Value

为 CREATE 视图设置默认值的正确方法是什么? 因此 EDIT 视图应始终显示已保存模型的值。


这似乎是一个愚蠢的问题,但我对此困惑了很长时间,我想知道正确的方法。 我有一些想法,比如:

  • 请勿使用共享文件进行创建/编辑 (_form.blade.php)(我认为这不是一个好主意)。
  • 在控制器中设置默认变量(也不好)。

【问题讨论】:

    标签: laravel blade


    【解决方案1】:
    {!! Form::text('name', (isset($savedModel)) ? $savedModel->name : "your default value") !!}
    

    我没有尝试在 Form 外观元素中使用三元组,但它可能会起作用。

    【讨论】:

    • 我相信我表达得很糟糕。问题不是默认值动态,这是因为它也在 EDIT 表单中显示默认值,它应该显示保存模型的值。
    • @LucianoNascimento,我相信更新应该会为您解决这个问题。检查保存的模型。如果已设置,则显示名称,否则显示默认值。
    【解决方案2】:

    我相信你想要的是这样的:

    <input name="field" value="{{ old('field', isset($model->field) ? $model->field : '') }}"/>
    

    以下是细分:

    • 如果他们编辑/保存(第一次)表单并且保存失败,但为back()-&gt;withErrors(),则将使用此值。
    • 如果他们只是调用“编辑”视图而不做任何更改,则将使用 $model-&gt;field
    • 如果他们正在创建模型但尚未尝试保存,则不会使用任何值。 ('')

    这应该涵盖所有场景。

    【讨论】:

      【解决方案3】:

      根据我的经验,通常最好不要在创建/编辑操作之间共享视图。您会遇到很多可以避免的条件逻辑,并且在显示表单错误等时获得更清晰的用户体验。

      至于显示 Create 视图的默认值,我使用 old('attribute', 'Default Value') 辅助方法来实现这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-21
        • 1970-01-01
        相关资源
        最近更新 更多