cjmellor / engageify
轻松为您的模型添加点赞、踩、好评、差评等互动功能,使您的应用中的用户交互更加丰富
Requires
- php: ^8.2|^8.3
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.0|^8.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpunit/phpunit: ^10.0
README
Engageify 是一个 Laravel 扩展包,允许您将用户互动(如点赞)等功能集成到您的模型中。
安装
您可以通过 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。