2014-09-14 1 views
8

Просто играя с Laravel 5, и у меня возникают трудности с использованием синтаксиса шаблонов Blade. Похоже, что все мои специальные символы ускользают. У меня что-то не так с моей настройкой?Laravel 5.0 - Ошибки шаблона Blade

Просто, чтобы показать мою установку, я добавил следующее config/app.php:

Синонимы: 'Form' => 'Illuminate\Html\FormFacade', 'Html' => 'Illuminate\Html\HtmlFacade' Поставщики услуг: 'Illuminate\Html\HtmlServiceProvider'

Теперь вот мой вид лезвия:

@extends('layout') 

@section('content') 

    {{ Form::open() }} 

    {{ Form::close() }} 

@stop 

И вот вывод в браузере:

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

А вот выход из вида-источника:

<!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> 

ответ

31

В Laravel 5, {{ }} будет автоматически бежать. Теперь вам нужно использовать {!! !!}.

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

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

Больше прочитать об изменении можно увидеть на https://laracasts.com/discuss/channels/general-discussion/new-blade-tag-for-unescaped-data-thoughts (спасибо @ user1960364).

+4

Отлично, спасибо ... WTF !!! Почему Тейлор меняет это? Примите ответ, как только сможете. – Gravy

+0

Стоит прочитать: https://laracasts.com/discuss/channels/general-discussion/new-blade-tag-for-unescaped-data-thoughts – user1960364

+1

Это было изменено из соображений безопасности. Лучше избегать. По умолчанию он избегает предотвращения ленивых программистов от ошибки. – Yada

1

Если вы должны использовать старый (L4.2 или меньше) Синтаксис клинка, добавьте следующие строки в нижней части AppServiceProvider @ регистра:

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

Это не должно быть сделано легко, и может сделайте ваше приложение более уязвимым для эксплойтов XSS, поэтому используйте его с осторожностью.

+1

Я бы не сказал, что это «может сделать ваше приложение более уязвимым для эксплойтов XSS». Старый синтаксис больше не уязвим для эксплойтов XSS, чем новый синтаксис. Пока вы помните, какие обозначения использовать для экранирования уязвимых переменных, либо новый, либо старый синтаксис делают то же самое. – orrd