如何在 Laravel 中自动创建文章简介
嗨,显示数据的常见情况是“descriptions”或任何其他长文本字段,很少具有相同的长,要保留一个公共长度,您可能会实现摘录功能,在Laravel 7 中,这是一个非常简单的功能, 使用 lluminate\Support\Str
命名空间中的 Str
类。
假设您有一个 Post
模型,那么您可以创建一个如下函数:
use Illuminate\Support\Str;
class Post
{
const EXCERPT_LENGTH = 100;
protected $fillable = [
..., 'body'
]
public function excerpt()
{
return Str::limit($this->body, Post::EXCERPT_LENGTH)
}
}
因此,现在在 blade 文件中,您可以使用以下方法:
<h1>{{ $post->title }}</h1>
<p>{{ $post->excerpt() }}</p>
好的,现在您有了一个如何使用此功能的想法,您可以在 appServiceProvider
或自定义的 bladeServiceProvider
中使用它来添加 blade 指令(这是常见的方式),记得正确导入命名空间即可。
在任何服务提供者中注册即可:
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
Blade::directive('excerpt', function ($text) {
return "<?php echo Str::limit($text, 100); ?>";
});
}
视图文件中:
<p>@excerpt($post->body)</p>
我特别喜欢这种方式,因为它对Blade指令似乎是一个很好的关注,同时由于它不绑定到某些特定模型,因此它具有灵活性,它具有更高的可读性,并且可用于任何模型中的任何文本。
您甚至可以直接在 blade 文件中使用 Str
类,不用担心导入命名空间,默认情况下在 blade 文件中添加 Str
类(也许不喜欢)。
<p>{{ Str::limit($post->body, 100) }}</p>
实现此目的的另一种方法是添加另一列并保存摘录,如下所示:
$post->excerpt = Str::limit($request->body, 100);
在某些情况下,这对于单词过多的帖子特别有用。
谢谢阅读!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。