そのため、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を使用している場合、少し簡潔な代替手段は Mutators です。タスクモデルで、次のようなメソッドを作成します。
public function getTextAttribute($value)
{
return nl2br(e($value), false);
}
これで{!! $task->text !!}
を使用でき、HTMLが正しく安全に出力されます。このメソッドの良いところは、ラッパータグの追加やMarkdownの使用など、get...Attribute
メソッドであらゆる方法で変換できることです。
生データとHTMLバージョンの両方にアクセスする必要がある場合は、上記を次のように置き換えることができます。
public function getTextHtmlAttribute()
{
return nl2br(e($this->text), false);
}
次に、元の{{ $task->text }}
とHTMLバージョンの{!! $task->text_html !!}
を使用します。