Menu

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

本文章首发在 Laravel China 社区
上一篇 下一篇
讨论数量: 0
发起讨论


暂无话题~
刻意练习,每日精进。
2
点赞
98
浏览
0
讨论

维护者