yii2mod/yii2-moderation

为 Yii2 提供的简单内容审核系统,允许您审核或拒绝如帖子、评论等资源。

安装次数: 63,145

依赖项: 4

建议者: 0

安全性: 0

星标: 7

关注者: 4

分支: 0

开放问题: 1

类型:yii2-extension

1.2 2017-02-18 11:54 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:42:19 UTC


README

Yii2 审核扩展


为 Yii2 提供的简单内容审核系统,允许您审核或拒绝如帖子、评论等资源。

Latest Stable Version Total Downloads License Build Status

安装

安装此扩展的首选方式是通过 composer

运行以下命令:

php composer.phar require --prefer-dist yii2mod/yii2-moderation "*"

或者

"yii2mod/yii2-moderation": "*"

将以下内容添加到你的 composer.json 文件的 require 部分中。

配置

要为一个模型启用审核,请使用 yii2mod\moderation\ModerationBehavior 行为,并将 statusmoderated_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 上支持我们。所有承诺都将专门用于维护和新功能。