登录  /  注册

使用 Laravel Moderation 扩展在 Laravel 应用中实现简单的内容审核系统

php中文网
发布: 2016-06-23 13:01:30
原创
1056人浏览过

1、简介

Laravel Moderation 是一个基于 Laravel 5.* 实现的简单内容审核系统,使用该扩展可以允许或拒绝对应用资源的请求,比如文章、评论、用户等,以便通过屏蔽攻击性、干扰性或侮辱性的内容来保持应用的纯净。简单来说,就是通过一个审核状态来判断资源是否通过审核,然后把这个功能集成到 Laravel Moderation扩展包。大致的操作流程如下:

  • 首先,用户创建资源(文章、评论或其他Eloquent模型)
  • 创建后该资源处于待审核或不可见状态(例如通过 Post::all() 只返回审核通过的文章)
  • 后台管理员决定是否通过或拒绝这个资源
  • 在管理员的审核下保持应用的纯净

2、安装

通过Composer安装:

composer require hootlex/laravel-moderation
登录后复制

在 config/app.php 中注册服务提供者:

'providers' => [    ...    Hootlex\Moderation\ModerationServiceProvider::class,    ...];
登录后复制

最后发布扩展配置文件到 config 目录:

php artisan vendor:publish --provider="Hootlex\Moderation\ModerationServiceProvider" --tag=config
登录后复制

3、模型设置

要开启模型审核,可以在模型类中使用 Hootlex\Moderation\Moderatable trait 并添加 status 、 moderated_by 和 moderated_at 字段到模型对应数据表。

use Hootlex\Moderation\Moderatable;class Post extends Model{    use Moderatable;    ...}
登录后复制

创建数据库迁移文件:

class AddModeratioColumnsToPostsTable extends Migration{    /**     * Run the migrations.     *     * @return void     */    public function up()    {        Schema::table('posts', function (Blueprint $table) {            $table->smallInteger('status')->default(0);            $table->dateTime('moderated_at')->nullable();            //如果你想跟踪谁审核了这个模型,添加一个'moderated_by'字段            //$table->integer('moderated_by')->nullable()->unsigned();        });    }    /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::table('posts', function(Blueprint $table)        {            $table->dropColumn('status');            $table->dropColumn('moderated_at');            //$table->integer('moderated_by')->nullable()->unsigned();        });    }}
登录后复制

运行迁移命令添加对应字段到数据表 posts :

php artisan migrate
登录后复制

4、使用案例

注:这里我们以Post模型为例进行演示,以此类推,你可以对任何模型进行审核。

审核模型

通过id对模型进行审核(通过、不通过):

Post::approve($post->id);Post::reject($post->id);
登录后复制

或者通过查询构建器:

Post::where('title', 'Horse')->approve();Post::where('title', 'Horse')->reject();
登录后复制

查询模型

默认情况下只返回审核通过的模型:

//返回所有审核通过的模型Post::all();//返回标题为Horse的审核通过的模型Post::where('title', 'Horse')->get();
登录后复制

查询待审核或审核不通过的模型:

//返回待审核postsPost::pending()->get();//返回审核不通过postsPost::rejected()->get();//返回审核通过和待审核postsPost::withPending()->get();//返回审核通过和不通过的postsPost::withRejected()->get();
登录后复制

查询所有模型:

//返回所有postsPost::withAnyStatus()->get();//返回所有title为Horse的模型Post::withAnyStatus()->where('title', 'Horse')->get();
登录后复制

模型状态

有三个辅助函数帮助我们检查模型状态:

//检查模型是否是待审核$post->isPending();//检查模型是否审核通过$post->isApproved();//检查模型是否审核不通过$post->isRejected();
登录后复制

严格审核

严格审核意味着只有审核通过对资源才能查询出来。要返回其他状态的模型必须修改配置禁用严格审核,下面我们就来看看如何配置。

5、配置

全局配置

通过编辑 config/moderation.php 文件对全局进行配置,在该文件中你可以配置以下选项:

  • status_column 表示数据表中默认状态字段 status
  • moderated_at_column 表示数据表中默认字段 moderated_at
  • moderated_by_column 表示数据表中默认字段 moderated_by
  • strict 表示严格审核

模型配置

在模型中你可以定义一些变量来覆盖全局配置

比如要覆盖 status 字段,可以这么做:

const MODERATION_STATUS = 'moderation_status';
登录后复制

要覆盖 moderated_at 字段:

const MODERATED_AT = 'mod_at';
登录后复制

要覆盖 moderated_by 字段:

const MODERATED_BY = 'mod_by';
登录后复制

要启用或者禁用严格审核:

public static $strictModeration = true;
登录后复制
智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号