如何将 Laravel (5.2) isset 与包含变量的 href 一起使用?
How do I use Laravel (5.2) isset with an an href which contains a variable?
我正在尝试在我的 Blade 视图中使用 isset()
,如果设置了该值,则显示包含变量值的 href
。
我正在使用 {!! !!}
来让它工作,但是 URL 中的 {{ }}
显示为原始 HTML。这是可以理解的,但不是我需要的。
{!! isset($scenario->bpmn) ? '<a href="{{ url($scenario->bpmn) }}" target="_blank"><i class="fa fa-file-image-o" aria-hidden="true"></i></a>' : '' !!}
有办法吗?
我们不能将 {{ ... }}
或 {!! ... !!}
表达式嵌套在另一个表达式中,因为 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 攻击。
对我来说,唯一合理的方法是像这样使用 @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
看文件内容也会更容易阅读
我正在尝试在我的 Blade 视图中使用 isset()
,如果设置了该值,则显示包含变量值的 href
。
我正在使用 {!! !!}
来让它工作,但是 URL 中的 {{ }}
显示为原始 HTML。这是可以理解的,但不是我需要的。
{!! isset($scenario->bpmn) ? '<a href="{{ url($scenario->bpmn) }}" target="_blank"><i class="fa fa-file-image-o" aria-hidden="true"></i></a>' : '' !!}
有办法吗?
我们不能将 {{ ... }}
或 {!! ... !!}
表达式嵌套在另一个表达式中,因为 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 攻击。
对我来说,唯一合理的方法是像这样使用 @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
看文件内容也会更容易阅读