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)
    }
}
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>
Tambien puedes usar una directiva blade especifica para esto, podemos crear un provider para directivas blade:
php artisan make:provider BladeServiceProvider
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); ?>";
    });
}
Y en tus vistas puedes usar la directiva así:
<p>@excerpt($post->body)</p>
Espero que te sea de utilidad, saludos!
 
 
              
 
                       
    
Top comments (0)