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?
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('{{', '}}');
Approche simple qui fonctionne pour Laravel 4 + Laravel 5.
{!! nl2br(e($task->text)) !!}
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.