2017-11-01 8 views
1

ブレードビューでisset()を使用しようとしていて、値が設定されている場合は、変数の値を含むhrefと表示されます。変数を含むhrefでLaravel(5.2)issetを使用するにはどうすればよいですか?

私は{!! !!}を使用していますが、URL内の{{ }}が生のHTMLとして表示されています。それは理解できますが、私が必要とするものではありません。

{!! isset($scenario->bpmn) ? '<a href="{{ url($scenario->bpmn) }}" target="_blank"><i class="fa fa-file-image-o" aria-hidden="true"></i></a>' : '' !!} 

これを行う方法はありますか?

答えて

1

我々は別の内側に巣{{ ... }}または{!! ... !!}表現をすることはできませんブレードには、以下の(単純化)の例のように出力文にそれらを書き換えので:私たちが見ることができるように

echo isset($scenario->bpmn) ? '<a href="{{ url($scenario->bpmn) }}">...</a>' : ''; 

、ブレイドは再帰的にしませんこれらの出力文をレンダリングします。代わりに、文字列の連結を使用します。これは、XSSを防ぐことができますエスケープ{!! ... !!}出力の使用を回避

@if (isset($scenario->bpmn)) 
    <a href="{{ url($scenario->bpmn) }}">...</a> 
@endif 

:また

{!! isset($scenario->bpmn) ? '<a href="' . url($scenario->bpmn) . '">...</a>' : '' !!} 

を、私たちはプレースホルダ式を含めることができます@ifディレクティブを使用します$scenario->bpmnにユーザー入力が含まれていると攻撃されます。私にとって

+0

ですべての良い答えを見たが、これは後のことでした正確に何をした場合にも読みやすくなります。本当にありがとう! – RushVan

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 

ファイルの内容

関連する問題