saving 这个方法没有在哪里调用的啊?

  1. Observers/TopicObserver.php 这个文件没有地方在调用啊,我发现,就算把这个文件删了整个程序也还是可以用。
  2. saving这个方法也是没用地方在调用啊,所以我本地的xss,话题摘录这些功能都没用

查了一下说,TopicObserver.php 是之前自动生成的,但是没有注册是吗?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

6.1节:新建话题《L02 Laravel 教程 - Web 开发实战进阶 ( Laravel 5.8 )》

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

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

4年前 评论
讨论数量: 9

6.1节:新建话题《L02 Laravel 教程 - Web 开发实战进阶 ( Laravel 5.8 )》

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

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

4年前 评论

@ishu 但是为何我的saving方法不生效呢?AppServiceProvider里我的好像并没有注册什么东西

4年前 评论

@wongvio 贴一下你的 AppServiceProvider 代码

4年前 评论

@ishu 代码如下:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Schema::defaultStringLength(191);
    }
}
4年前 评论

@wongvio 教程里代码生成器产生的代码是这样的:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        \App\Models\User::observe(\App\Observers\UserObserver::class);
        \App\Models\Topic::observe(\App\Observers\TopicObserver::class);

        //
    }
}
4年前 评论

@ishu 我记忆里没有改过AppServiceProvider,下一次做的时候我注意一下,可以我加上这两句话以后,saving依然没有效果,还是可以正常输入script,摘要也是没有生成。以下是我的saving代码:

<?php

namespace App\Observers;

use App\Models\Topic;
use App\Handlers\SlugTranslateHandler;

// creating, created, updating, updated, saving,
// saved,  deleting, deleted, restoring, restored

class TopicObserver
{
    public function saving(Topic $topic)
    {
      // XSS 过滤
      $topic->body = clean($topic->body, 'user_topic_body');

      // 生成话题摘录
      $topic->excerpt = make_excerpt($topic->body);

      // 如 slug 字段无内容,即使用翻译器对 title 进行翻译
      if ( ! $topic->slug) {
          $topic->slug = app(SlugTranslateHandler::class)->translate($topic->title);
      }
    }
}
4年前 评论

@wongvio 你把代码传 github 我看下吧,这样只看一个文件也看不出来

4年前 评论

@ishu 摘要和翻译都有了,xss过滤无效,我再检查检查

4年前 评论

@Summer 能不能出一个红包功能啊,好想给@ishu 这样的同学一个红包~~~~

4年前 评论

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