Devscamp.net
Crea extractos de texto en Laravel

Crea extractos de texto en Laravel

8 de ene. de 2021

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!