我正在尝试在我的Blade视图中使用isset()
,如果设置了值,则显示href
,其中包含变量的值。
我正在使用{!! !!}
让它工作,但网址中的{{ }}
显示为原始HTML。这是可以理解的,但不是我需要的。
{!! isset($scenario->bpmn) ? '<a href="{{ url($scenario->bpmn) }}" target="_blank"><i class="fa fa-file-image-o" aria-hidden="true"></i></a>' : '' !!}
有办法做到这一点吗?
答案 0 :(得分:1)
我们无法将{{ ... }}
或{!! ... !!}
表达式嵌套在另一个表达式中,因为Blade会将它们重写为类似于以下(简化)示例的输出语句:
echo isset($scenario->bpmn) ? '<a href="{{ url($scenario->bpmn) }}">...</a>' : '';
正如我们所看到的,Blade不会以递归方式呈现这些输出语句。相反,使用字符串连接:
{!! isset($scenario->bpmn) ? '<a href="' . url($scenario->bpmn) . '">...</a>' : '' !!}
或者,使用@if
指令,它允许我们包含占位符表达式:
@if (isset($scenario->bpmn))
<a href="{{ url($scenario->bpmn) }}">...</a>
@endif
这可以避免使用未转义的{!! ... !!}
输出,如果$scenario->bpmn
包含用户输入,则有助于防止XSS攻击。
答案 1 :(得分:0)
对我来说,使用@if
指令是唯一合理的方式:
@if (isset($scenario->bpmn))
<a href="{{ url($scenario->bpmn) }}" target="_blank"><i class="fa fa-file-image-o" aria-hidden="true"></i></a>
@endif
如果查看文件内容,也会更容易阅读