Laravel刀片"旧输入或默认变量"?

Jet*_*açi 29 php concatenation laravel blade laravel-blade

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

value="{{ old('salary_' . $employee->id) or 'Default' }}"
Run Code Online (Sandbox Code Playgroud)

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

我认为问题与串联有关,但我不知道如何解决它!?

Adu*_*hay 56

or是PHP中的比较运算符,因此您的代码正在评估true,或1.您想要的是三元if语句.

如上所述,or可以在刀片中用作三元if语句的简写.

但是你可以(而且应该)只将默认值作为函数的第二个参数传递,如下所示:

value="{{ old('salary_' . $employee->id, 'Default') }}"
Run Code Online (Sandbox Code Playgroud)

  • 现在这是有趣的事情; 使用`{{$ value或$ default}}`是在Blade中执行三元语句的简便方法([参考](http://laravel.com/docs/5.1/blade#displaying-data)).因此,我不认为这是对的.但是,它更清晰! (3认同)

Ант*_*нов 9

您可以使用代码(对于 PHP 7):

{{ old('field_name') ?? $model->field_name ?? 'default' }}
Run Code Online (Sandbox Code Playgroud)

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

{{ (old() ? old('field_name', false) : $model->field_name ?? false) ? 'checked' : '' }}
Run Code Online (Sandbox Code Playgroud)

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