如何在 Laravel 中自动创建文章简介

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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://dev.to/arielmejiadev/create-an-e...

译文地址:https://learnku.com/laravel/t/46702

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!