51.垃圾内容检测机制(三)

未匹配的标注

本节说明

  • 对应视频教程第 51 小节:Spam Detection At All Ports

本节内容

目前,我们只在用户添加回复时运行了检测机制,但是,我们还需要对更新回复或新建话题进行检测。首先我们检测更新回复:
forum\app\Http\Controllers\RepliesController.php

    .
    .
    public function update(Reply $reply,Spam $spam)
    {
        $this->authorize('update',$reply);

        $this->validate(request(),['body' => 'required']);
        $spam->detect(request('body'));

        $reply->update(request(['body']));
    }
    .
    .

我们又一次使用了以下代码:

$this->validate(request(),['body' => 'required']);
$spam->detect(request('body'));

还记得我们的 DRY 原则吗?我们把上面的代码抽取出来:
forum\app\Http\Controllers\RepliesController.php

    .
    .
    public function store($channelId,Thread $thread)
    {
        $this->validateReply();

        $reply = $thread->addReply([
            'body' => request('body'),
            'user_id' => auth()->id(),
        ]);

        if(request()->expectsJson()){
            return $reply->load('owner');
        }

        return back()->with('flash','Your reply has been left.');
    }

    public function update(Reply $reply)
    {
        $this->authorize('update',$reply);

        $this->validateReply();

        $reply->update(request(['body']));
    }
    .
    .
    protected function validateReply()
    {
        $this->validate(request(),['body' => 'required']);

        resolve(Spam::class)->detect(request('body'));
    }
}

接着是新建话题:
forum\app\Http\Controllers\ThreadsController.php

    .
    .
    public function store(Request $request,Spam $spam)
    {
        $this->validate($request,[
           'title' => 'required',
            'body' => 'required',
            'channel_id' => 'required|exists:channels,id'
        ]);

        $spam->detect($request['body']);

        $thread = Thread::create([
            'user_id' => auth()->id(),
            'channel_id' => request('channel_id'),
            'title' => request('title'),
            'body' => request('body'),
        ]);

        return redirect($thread->path())
            ->with('flash','Your thread has been published!');
    }
    .
    .

现在如果我们进行不合法的操作,就会被阻止:
file
但是我们还有问题需要解决,那就是被阻止后前端的反馈。我们将在下一节解决这个问题,最后运行以下全部测试:
file

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~