Laravel 5.0 — ошибки шаблона блейда

Просто играю с Laravel 5, и у меня возникают трудности с использованием синтаксиса шаблонов 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>

А вот вывод из 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>

person Gravy    schedule 14.09.2014    source источник


Ответы (2)


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

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

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

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

person Marwelln    schedule 14.09.2014
comment
Отлично, спасибо... WTF!!! Зачем Тейлору это менять? Приму ответ, как только смогу. - person Gravy; 14.09.2014
comment
Стоит прочитать: laracasts.com/discuss /каналы/общее обсуждение/ - person user1960364; 14.09.2014
comment
Он был изменен из соображений безопасности. Лучше попрактиковаться в побеге. Наличие по умолчанию escape предотвращает ошибки ленивых программистов. - person Yada; 24.09.2014

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

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

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

person Bojan Lazarevic    schedule 17.02.2015
comment
Я бы не сказал, что это может сделать ваше приложение более уязвимым для эксплойтов XSS. Старый синтаксис не более уязвим для эксплойтов XSS, чем новый синтаксис. Пока вы помните, какую нотацию использовать для экранирования уязвимых переменных, новый или старый синтаксис делают одно и то же. - person orrd; 19.02.2015