Подтвердить что ты не робот

Как использовать nl2br() в Laravel 5 Blade

Итак, я хочу сохранить линейные черты из базы данных при использовании Blade Template Engine. Я придумал эту идею, используя

{!! nl2br(e($task->text)) !!}

Это работает. Но это выглядит как бесполезно сложное решение. Есть ли лучший способ?

4b9b3361

Ответ 1

Вы можете определить свой собственный "формат эха", который будет использоваться с обычными тегами контента {{ ... }}. Формат по умолчанию e(%s) (sprintf используется для применения форматирования)

Чтобы изменить этот вызов формата setEchoFormat() внутри поставщика услуг:

public function boot(){
    \Blade::setEchoFormat('nl2br(e(%s))');
}

Теперь вы можете просто использовать обычные теги эха:

{{ $task->text }}

Для эхо-сигналов, которые вы не хотите применять nl2br(), используйте тройные скобки {{{ ... }}}


Чтобы переключить функцию скобок (тройной и двойной) вокруг, сделайте следующее:

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

Ответ 2

Простой подход, который работает для Laravel 4 + Laravel 5.

{!! nl2br(e($task->text)) !!}

Ответ 3

Немного более чистой альтернативой, если вы используете Eloquent, является Мутаторы. В вашей модели задач создайте такой метод:

public function getTextAttribute($value)
{
    return nl2br(e($value), false);
}

Теперь вы можете использовать {!! $task->text !!}, и он будет правильно и безопасно выводить HTML. В этом методе хорошо то, что вы можете выполнять любые преобразования в методе get...Attribute, например добавлять теги-обертки или использовать Markdown.

Если вам нужен доступ как к исходным данным, так и к HTML-версии, вы можете заменить вышеприведенное на следующее:

public function getTextHtmlAttribute()
{
    return nl2br(e($this->text), false);
}

Тогда вы будете использовать {{ $task->text }} для оригинала и {!! $task->text_html !!} для HTML-версии.