yii2mod / yii2-moderation
为 Yii2 提供的简单内容审核系统,允许您审核或拒绝如帖子、评论等资源。
Requires
- php: >=5.5
- yii2mod/yii2-enum: *
- yiisoft/yii2: >=2.0.8
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-14 19:42:19 UTC
README
Yii2 审核扩展
为 Yii2 提供的简单内容审核系统,允许您审核或拒绝如帖子、评论等资源。
安装
安装此扩展的首选方式是通过 composer。
运行以下命令:
php composer.phar require --prefer-dist yii2mod/yii2-moderation "*"
或者
"yii2mod/yii2-moderation": "*"
将以下内容添加到你的 composer.json 文件的 require 部分中。
配置
要为一个模型启用审核,请使用 yii2mod\moderation\ModerationBehavior
行为,并将 status
和 moderated_by
列添加到你的模型表中。
创建一个迁移来添加新列。示例迁移
<?php use yii\db\Migration; /** * Handles adding moderation columns to table `post`. */ class m161117_092603_add_moderation_columns_to_post_table extends Migration { /** * @inheritdoc */ public function up() { $this->addColumn('post', 'status', $this->smallInteger()); $this->addColumn('post', 'moderated_by', $this->integer()); } /** * @inheritdoc */ public function down() { $this->dropColumn('post', 'status'); $this->dropColumn('post', 'moderated_by'); } }
要在你的 ActiveRecord 类中使用 ModerationBehavior,插入以下代码
use yii2mod\moderation\ModerationBehavior; class Post extends ActiveRecord { /** * @inheritdoc */ public function behaviors() { return [ ModerationBehavior::class, ]; } }
默认情况下,ModerationBehavior 会自动设置 moderated_by
属性。
如果你的属性名不同,你可以像以下这样配置 [[statusAttribute]] 和 [[moderatedByAttribute]] 属性
use yii2mod\moderation\ModerationBehavior; class Post extends ActiveRecord { /** * @inheritdoc */ public function behaviors() { return [ [ 'class' => ModerationBehavior::class, 'statusAttribute' => 'status_id', 'moderatedByAttribute' => 'moderator_id', // or set to `false` to disable this attribute. ], ]; } }
用法
在接下来的示例中,我将使用 Post 模型来演示行为和查询类的工作方式。你可以审核任何 ActiveRecord 模型。
审核模型
ModerationBehavior 为模型审核提供了以下方法
$post->markApproved(); // Change post status to Approved $post->markRejected(); // Change post status to Rejected $post->markPostponed(); // Change post status to Postponed $post->markPending(); // Change post status to Pending
模型状态
ModerationBehavior 还提供了以下方法来检查审核状态
$post->isPending(); // Check if a post is pending $post->isApproved(); // Check if a post is approved $post->isRejected(); // Check if a post is rejected $post->isPostponed(); // Check if a post is postponed
事件
默认情况下 [[yii2mod\moderation\ModerationBehavior]] 触发 [[yii2mod\moderation\ModerationBehavior::EVENT_BEFORE_MODERATION]]
你可以将此事件的处理器附加到你的 ActiveRecord 对象上
$post = Post::findOne($id); $post->on(ModerationBehavior::EVENT_BEFORE_MODERATION, function ($event) { $event->isValid = false; // prevent moderation for the model });
你还可以通过声明相应的方法在 ActiveRecord 类内部处理这些事件
use yii2mod\moderation\ModerationBehavior; class Post extends ActiveRecord { /** * @inheritdoc */ public function behaviors() { return [ ModerationBehavior::class, ]; } public function beforeModeration() { $this->moderated_at = time(); // log the moderation date return true; } }
查询模型
ModerationQuery
添加了仅获取已批准、已拒绝、已推迟或待处理模型的操作。用法示例
use yii2mod\moderation\ModerationQuery; class Post extends ActiveRecord { public static function find() { return new ModerationQuery(get_called_class()); } }
现在你可以使用以下方法
Post::find()->approved()->all(); // It will return all Approved Posts Post::find()->pending()->all(); // It will return all Pending Posts Post::find()->rejected()->all(); // It will return all Rejected Posts Post::find()->postponed()->all(); // It will return all Postponed Posts Post::find()->approvedWithPending()->all() // It will return all Approved and Pending Posts
支持我们
您的业务依赖于我们的贡献吗?请联系我们,在 Patreon 上支持我们。所有承诺都将专门用于维护和新功能。