Laravel Blade中的“old输入或默认变量”是什么?

48

我想在输入框中展示旧的输入值。如果没有旧的输入值,则显示其他变量:

value="{{ old('salary_' . $employee->id) or 'Default' }}"

但是当没有旧输入时,它会给我1而不是默认值!

我认为问题与连接有关,但我不知道如何解决!?

6个回答

81

or 是在PHP中的比较运算符,因此你的代码会计算为 true,或1。你需使用三元条件语句 if

如前所述,在Blade中,or可用作三元条件语句的简写。

但是,你可以(而且应该)将默认值作为第二个参数传递给函数,像这样:

value="{{ old('salary_' . $employee->id, 'Default') }}"

3
现在有趣的事情来了:使用{{ $value or $default }}是Blade中执行三元运算的简便方法(参考链接)。因此,我并不确信这样做是正确的,但它更加清晰易懂! - Chris Forrence
如 Laravel 文档所述:{{ isset($name) ? $name : 'Default' }} 简写方式 {{ $name or 'Default' }}。 - ArtisanBay
@ChrisForrence 你说得对!每天都有新的学习...更好的实现方式是将默认值作为第二个参数传递。 - Adunahay
这并没有解决问题。当旧输入为空时,它什么也不会输出...第二个变量也没有被回显。 - Jeton Thaçi
1
谢谢!这正是我在寻找的。我真希望 Laravel 文档有更多的教程,但我想这就是 Laracasts 的存在意义。 - Maximus
显示剩余2条评论

16
你可以使用以下代码(适用于PHP 7):
{{ old('field_name') ?? $model->field_name ?? 'default' }}

对于复选框的选中属性,请使用以下代码(如果默认值为false):

{{ (old() ? old('field_name', false) : $model->field_name ?? false) ? 'checked' : '' }}

Construction {{ $something or 'default'}} 仅适用于变量


对于“checked”可以使用以下代码:<input type="checkbox" name="active" value="active" @checked(old('active', $user->active)) /> - Sumeet Shroff


3

如 Laravel 文档所述:“如果你在 Blade 模板中显示旧的输入,使用 old 助手更方便:”。 因此,如果您需要添加/编辑数据表单(当您需要在编辑模式下使用编辑表单进行添加和编辑时,您需要使用从模型(数据库)加载的数据)以显示模型的值(通过控制器),您可以使用以下内容:

name="some_value" value="{{ $some_value or old('some_value', $the_value) }}"

"some_value_from_model"变量名在视图数组中的哪里。 在这种情况下,首先将使用$some_value设置到"value"中,如果没有,则尝试使用旧值(来自名称为"some_value"的请求)如果没有旧值,则应该使用''。

感谢WoodyDRN的评论。


10
但是如果您这样做 $some_value 或 old('some_value') - 那么如果用户在输入字段中输入任何内容并提交,而出现错误,则会默认返回 $some_value 并删除他们所写的任何内容。使用 old('some_value', $some_value) 可以修复这个问题。 - WoodyDRN

1

试试这个:

value="{{ old('salary_' . $employee->id) ?? 'Default' }}"

解释:

如果存在旧值,则将其设置为旧值,否则将设置为“Default”。


-6

试试这个:

<textarea name="alamat" id="" class="form-control" placeholder="Alamat">{{ old('alamat').@$biodata->alamat }}</textarea>

4
需要更详细的解释。 - Geshode
这到底是什么? - Jaber Al Nahian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接