Итак, я хочу сохранить линейные черты из базы данных при использовании Blade Template Engine. Я придумал эту идею, используя
{!! nl2br(e($task->text)) !!}
Это работает. Но это выглядит как бесполезно сложное решение. Есть ли лучший способ?
Итак, я хочу сохранить линейные черты из базы данных при использовании Blade Template Engine. Я придумал эту идею, используя
{!! nl2br(e($task->text)) !!}
Это работает. Но это выглядит как бесполезно сложное решение. Есть ли лучший способ?
Вы можете определить свой собственный "формат эха", который будет использоваться с обычными тегами контента {{ ... }}
. Формат по умолчанию e(%s)
(sprintf
используется для применения форматирования)
Чтобы изменить этот вызов формата setEchoFormat()
внутри поставщика услуг:
public function boot(){
\Blade::setEchoFormat('nl2br(e(%s))');
}
Теперь вы можете просто использовать обычные теги эха:
{{ $task->text }}
Для эхо-сигналов, которые вы не хотите применять nl2br()
, используйте тройные скобки {{{ ... }}}
Чтобы переключить функцию скобок (тройной и двойной) вокруг, сделайте следующее:
\Blade::setContentTags('{{{', '}}}');
\Blade::setEscapedContentTags('{{', '}}');
Простой подход, который работает для Laravel 4 + Laravel 5.
{!! nl2br(e($task->text)) !!}
Немного более чистой альтернативой, если вы используете 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-версии.