Laravel 博客开发|模型观察器

在前面已经完成管理后台添加文章,添加文章的时候除了选择专栏、输入标题和编辑文章内容之外,还需要填写摘要,摘要将作为文章页面的 description 元标签使用,有利于 SEO 搜索引擎优化。

摘录应该由文章内容中自动生成,生成的时机是在文章数据存入数据库之前,现在使用 Eloquent 的观察器来实现此功能。

Eloquent 模型会触发许多事件(Event),以对模型的生命周期内多个时间点进行监控: creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored。事件让每当有特定的模型类在数据库保存或更新时,执行代码。当一个新模型被初次保存将会触发 creating 以及 created 事件。如果一个模型已经存在于数据库且调用了 save 方法,将会触发 updatingupdated 事件。在这两种情况下都会触发 savingsaved 事件。

Eloquent 观察器允许对给定模型中进行事件监控,观察者类里的方法名对应 Eloquent 想监听的事件。每种方法接收 model 作为其唯一的参数。代码生成器已经为我们生成了一个观察器文件,并在 AppServiceProvider 中注册。接下来要定制此观察器,在 Article 模型保存时触发的 saving事件中,对 摘要 excerpt 字段进行赋值。

添加观察器

运行如下命令创建观察器:

php artisan make:observer ArticleObserver

替换内容为如下内容:
app/Observers/ArticleObserver

<?php namespace App\Observers;

use App\Models\Article;

class ArticleObserver
{
    public function saving(Article $article)
    {
        $article->excerpt = $this->make_excerpt($article->content);
    }

    public function make_excerpt($value, $length = 200)
    {
        $excerpt = trim(preg_replace('/\r\n|\r|\n+/', ' ', strip_tags($value)));
        return str()->limit($excerpt, $length);
    }
}

注册观察器

修改 AppServiceProvider.php文件中的 boot访问为如下内容:
app/Providers/AppServiceProvider.php

public function boot()
{
    Paginator::defaultView('vendor.pagination.bulma');
    Article::observe(ArticleObserver::class);
}

修改控制器

现在去掉管理后台添加和编辑文章时的摘要字段的输入,修改管理后台文章控制器中的 form方法为如下内容:

protected function form()
{
    $columns = Column::pluck('name', 'id')->toArray();

    return Form::make(new Article(), function (Form $form) use ($columns) {
        $form->display('id');
        $form->select('column_id')->options($columns);
        $form->text('title');
        $form->markdown('content');
        $form->display('created_at');
        $form->display('updated_at');
    });
}

现在添加文章的时候不需要填入摘要字段,自动由文章内容生成摘要字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SevDot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值