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)