cjmellor/engageify

轻松为您的模型添加点赞、踩、好评、差评等互动功能,使您的应用中的用户交互更加丰富

v1.0.0 2024-03-24 23:31 UTC

This package is auto-updated.

Last update: 2024-09-08 18:32:29 UTC


README

Latest Version on Packagist GitHub Tests Action Status Total Downloads Packagist PHP Version Laravel Version

Engageify 是一个 Laravel 扩展包,允许您将用户互动(如点赞)等功能集成到您的模型中。

Engagement Package GitHub Preview-2

安装

您可以通过 Composer 安装此包

composer require cjmellor/engageify

发布配置文件(可选)

php artisan vendor:publish --tag="engageify-config"

发布的配置文件允许您自定义表名、模型关系等。

使用方法

对于您希望具有互动功能的模型(点赞/好评),请使用 Engageable 特性。

<?php

use Cjmellor\Engageify\Concerns\HasEngagements;

class BlogPost extends Model
{
    use HasEngagements;

    // ...
}

反应

允许用户对模型进行反应。

// Like
$post->like();

// Dislike
$post->dislike();

// Upvote
$post->upvote();

// Downvote
$post->downvote();

每次反应发生时都会运行一个 事件

  • ModelLikedEvent
  • ModelDislikedEvent
  • ModelUpvotedEvent
  • ModelDownvotedEvent

多重反应

默认情况下,用户对模型只能进行一次反应。如果您希望允许多重反应,可以通过将 engagement.allow_multiple_engagements 配置值设置为 true 来实现。

“点赞”特定反应

“点赞”反应有一些额外的功能。点赞可以取消点赞。这不应与“踩”混淆,“踩”被视为互动,而取消点赞是删除互动。

$comment->unlike();

当模型被“取消点赞”时,会触发一个 事件

还有一个方便的 toggle() 方法,可以在“点赞”和“取消点赞”之间切换。

$comment->toggleLike();

获取互动

获取互动次数。

// Likes
$post->likes();

// Dislikes
$post->dislikes();

// Upvotes
$post->upvotes();

// Downvotes
$post->downvotes();

缓存互动次数

有一个可用的缓存功能,默认是关闭的,但可以在配置文件中更改,或者通过将其添加到您的 .env 文件中。

ENGAGEIFY_ALLOW_CACHING=true
ENGAGEIFY_CACHE_DURATION=3600

当检索到互动时,它将被缓存,并且后续请求将从中检索数据。

在每次新的互动发生时,缓存将被清除。

获取参与用户

除了获取互动数量外,您还可以获取参与的用户。

$post->likes(showUsers: true);

这将返回一个包含喜欢模型的用户的 Collection。

这适用于所有 4 种获取方法。

事件

每次互动都会触发一个事件。

以下是一个当模型被“点赞”时事件的示例。每个事件都将返回相同的数据

public Model $user,
public Model $engageable,
public Engagement $engagement,

当模型被“取消点赞”时,会触发一个 ModelDisengagedEvent

public Model $user,
public Model $engageable,

测试

composer pest

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

许可

MIT 许可证(MIT)。有关更多信息,请参阅 LICENSE