web-dev-qa-db-fra.com

Comment utiliser nl2br () dans Laravel 5 Blade

Je souhaite donc conserver les sauts de ligne de la base de données lors de l'utilisation du moteur de modèle de lame. J'ai eu l'idée d'utiliser

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

Ça marche. Mais cela ressemble à une solution inutilement compliquée. Y a-t-il une meilleure façon?

25
jascha

Vous pouvez définir votre propre "format d'écho" qui sera utilisé avec les balises de conten{{ ... }}. Le format par défaut est e(%s) (sprintf est utilisé pour appliquer la mise en forme)

Pour modifier ce format, appelez setEchoFormat() dans un fournisseur de services:

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

Maintenant, vous pouvez simplement utiliser les balises d'écho normales:

{{ $task->text }}

Pour les échos que vous ne voulez pas appliquer nl2br(), utilisez les crochets triples {{{ ... }}}


Pour changer la fonction des supports (triple et double), procédez comme suit:

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

Approche simple qui fonctionne pour Laravel 4 + Laravel 5.

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

Une alternative légèrement plus propre si vous utilisez Eloquent est Mutateurs . Sur votre modèle de tâche, créez une méthode comme celle-ci:

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

Vous pouvez maintenant utiliser {!! $task->text !!} et il affichera le HTML correctement et en toute sécurité. La bonne chose à propos de cette méthode est que vous pouvez effectuer toutes sortes de conversions dans le get...Attribute, comme l'ajout de balises wrapper ou l'utilisation de Markdown.

Si vous avez besoin d'accéder à la fois aux données brutes et à la version HTML, vous pouvez remplacer ce qui précède par ceci:

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

Vous utiliseriez alors {{ $task->text }} pour l'original et {!! $task->text_html !!} pour la version HTML.

0
DisgruntledGoat