web-dev-qa-db-ja.com

Laravel 5 Bladeでnl2br()を使用する方法

そのため、Blade Template Engineを使用している間、データベースからの改行を保持したいと思います。を使用してアイデアを思いついた

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

できます。しかし、それは不必要に複雑なソリューションのように見えます。もっと良い方法はありますか?

25
jascha

通常のコンテンツタグ _{{ ... }}_で使用される独自の「エコー形式」を定義できます。デフォルトのフォーマットはe(%s)sprintfがフォーマットの適用に使用されます)

その形式を変更するには、サービスプロバイダー内でsetEchoFormat()を呼び出します。

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

これで、通常のエコータグを使用できます。

_{{ $task->text }}
_

nl2br()を適用したくないエコーの場合は、トリプルブラケット_{{{ ... }}}_を使用します


ブラケットの機能(トリプルとダブル)を切り替えるには、次のようにします。

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

Laravel 4 + Laravel 5に対して機能するシンプルなアプローチ。

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

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 !!}を使用します。

0
DisgruntledGoat