如何使用Laravel(5.2)设置一个包含变量的href?

时间:2017-11-01 16:26:28

标签: php laravel laravel-5.2 laravel-blade

我正在尝试在我的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>' : '' !!}

有办法做到这一点吗?

2 个答案:

答案 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

如果查看文件内容,也会更容易阅读