DEV Community

Cover image for Crea extractos de texto en Laravel
Ariel Mejia for Devscamp

Posted on

Crea extractos de texto en Laravel

Laravel 7 agrega un nuevo método a la clase "Illuminate\Support\Str".

Supongamos que tenemos un modelo "Post" y al mostrar todos los posts en una vista tipo "index" o lista de posts, y en vez de mostrar todo el texto, queremos mostrar únicamente un extracto del texto, en Laravel podemos hacer esto de varias formas.

Creando un Accessor:

use Illuminate\Support\Str; class Post { const EXCERPT_LENGTH = 100; protected $fillable = [ ..., 'body' ] protected $appends = ['excerpt']; public function getExcerptAttribute() { return Str::limit($this->body, Post::EXCERPT_LENGTH) } } 
Enter fullscreen mode Exit fullscreen mode

So now in your blade files you can use this method:

Ahora podrás usar el accessor en tus vistas y en cualquier parte de tu codigo donde uses el modelo post.

<h1>{{ $post->title }}</h1> <p>{{ $post->excerpt() }}</p> 
Enter fullscreen mode Exit fullscreen mode

Tambien puedes usar una directiva blade especifica para esto, podemos crear un provider para directivas blade:

php artisan make:provider BladeServiceProvider 
Enter fullscreen mode Exit fullscreen mode

Agregamos la logica para crear una directiva blade en el método "boot".

/** * Bootstrap services. * * @return void */ public function boot() { Blade::directive('excerpt', function ($text) { return "<?php echo Str::limit($text, 100); ?>"; }); } 
Enter fullscreen mode Exit fullscreen mode

Y en tus vistas puedes usar la directiva así:

<p>@excerpt($post->body)</p> 
Enter fullscreen mode Exit fullscreen mode

Espero que te sea de utilidad, saludos!

Top comments (0)