2014-09-14 33 views
8

Chỉ cần chơi với Laravel 5 và gặp khó khăn khi sử dụng cú pháp khuôn mẫu Blade. Có vẻ như tất cả các nhân vật đặc biệt của tôi đang bị trốn thoát. Tôi có vấn đề gì với thiết lập của tôi không?Laravel 5.0 - Lỗi mẫu lưỡi

Chỉ cần để hiển thị thiết lập của tôi, tôi đã thêm dòng sau vào config/app.php:

biệt hiệu: 'Form' => 'Illuminate\Html\FormFacade', 'Html' => 'Illuminate\Html\HtmlFacade' cung cấp dịch vụ: 'Illuminate\Html\HtmlServiceProvider'

Bây giờ đây là cái nhìn lưỡi của tôi:

@extends('layout') 

@section('content') 

    {{ Form::open() }} 

    {{ Form::close() }} 

@stop 

Và đây là đầu ra trong trình duyệt:

<form method="POST" action="http://test.app:8000/categories/create" accept-charset="UTF-8"><input name="_token" type="hidden" value="m4RdpqdbbqQ2F7iwfDkSDKTzEmaBGNvpJbj5LnqE"> </form>

Và đây là kết quả từ view-source:

<!doctype HTML> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <title>My Site</title> 
    </head> 
    <body> 

     <header></header> 

     <content> 
    &lt;form method=&quot;POST&quot; action=&quot;http://test.app:8000/categories/create&quot; accept-charset=&quot;UTF-8&quot;&gt;&lt;input name=&quot;_token&quot; type=&quot;hidden&quot; value=&quot;m4RdpqdbbqQ2F7iwfDkSDKTzEmaBGNvpJbj5LnqE&quot;&gt; 

    &lt;/form&gt; 

</content> 

    </body> 
</html> 

Trả lời

31

Trong Laravel 5, {{ }} sẽ tự động thoát. Những gì bạn cần sử dụng bây giờ là {!! !!}.

{!! Form::open() !!} 

{!! Form::close() !!} 

Đọc thêm về thay đổi có thể thấy trên https://laracasts.com/discuss/channels/general-discussion/new-blade-tag-for-unescaped-data-thoughts (nhờ @ user1960364).

+4

Tuyệt vời, cảm ơn ... WTF !!! Tại sao Taylor thay đổi điều đó? Sẽ chấp nhận câu trả lời càng sớm càng tốt. – Gravy

+0

Giá trị đọc: https://laracasts.com/discuss/channels/general-discussion/new-blade-tag-for-unescaped-data-thoughts – user1960364

+1

Nó đã được thay đổi vì lý do bảo mật. Tốt hơn là nên trốn thoát. Có nó mặc định để thoát khỏi ngăn chặn lập trình lười biếng từ làm cho một sai lầm. – Yada

1

Nếu bạn phải sử dụng cũ (L4.2 hoặc ít hơn) cú pháp Blade, thêm dòng sau vào dưới cùng của AppServiceProvider @ đăng ký:

\Blade::setRawTags('{{', '}}'); 
\Blade::setContentTags('{{{', '}}}'); 
\Blade::setEscapedContentTags('{{{', '}}}'); 

này không nên được thực hiện nhẹ nhàng, và có thể làm cho ứng dụng của bạn dễ bị tấn công XSS hơn, vì vậy hãy sử dụng nó một cách thận trọng.

+1

Tôi sẽ không nói điều này "có thể làm cho ứng dụng của bạn dễ bị tấn công XSS". Cú pháp cũ không dễ bị khai thác XSS hơn cú pháp mới. Miễn là bạn nhớ ký hiệu nào để sử dụng cho việc thoát khỏi các biến dễ bị tấn công, thì cú pháp mới hoặc cũ cũng làm như vậy. – orrd

Các vấn đề liên quan