devdojo/laravel-reactions

v1.2.0 2024-06-26 19:16 UTC

This package is auto-updated.

Last update: 2024-08-26 19:42:44 UTC


README

Latest Version on Packagist Software License Build Status Quality Score Total Downloads

Laravel Reactions 是一个包,如果你想在 Eloquent 模型上实现类似 Facebook 的点赞功能,你需要这个包。

特性

  • 安装简单,无需配置;
  • 提供现成的特性;
  • 可以通过多态的多对多关系为多个实体实现点赞;
  • 可以通过一些底层的魔法为多个实体实现点赞;

免责声明

本项目与 Facebook 没有任何关联。 我只是用“点赞”这个概念来提供一种思路。如果遇到法律问题,请通过电子邮件告知。

安装

使用 Composer 安装此包。

$ composer require DevDojo/laravel-reactions

将服务提供者添加到你的 config/app.php 文件中。

DevDojo\LaravelReactions\Providers\ReactionsServiceProvider::class,

运行迁移以创建 reactionsreactables 表。

$ php artisan migrate

你已经可以开始了。

使用方法

将特性添加到模型中

要使用此包,你需要遵循以下两个步骤

  • DevDojo\LaravelReactions\Traits\Reacts 特性添加到将要对此做出反应的实体中;
  • DevDojo\LaravelReactions\Traits\Reactable 特性添加到将要“接收”点赞的实体中;
  • 确保接收点赞的实体也实现了 DevDojo\LaravelReactions\Contracts\ReactableInterface 接口;

让我们举一个例子。

假设你的应用程序中有一些用户。你正在构建一个博客,所以你会有一些帖子。

你希望让你的用户可以对你的帖子进行点赞。就像 Facebook 一样,你知道。

假设我们有两个模型:UserPost

按照步骤,我们首先将 DevDojo\LaravelReactions\Traits\Reacts 特性添加到我们的 User 模型中。

use DevDojo\LaravelReactions\Traits\Reacts;

class User extends Model {
    use Reacts;
}

完成!现在,让我们来修改 Post 模型!

use DevDojo\LaravelReactions\Traits\Reactable;
use DevDojo\LaravelReactions\Contracts\ReactableInterface;

class Post extends Model implements ReactableInterface {
    use Reactable;
}

太棒了!你完成了。

默认情况下,该包附带一个 Reaction 模型。这个模型只有一个简单的属性:其 name。你可以轻松创建一个新的,只需要

$likeReaction = Reaction::createFromName('like');
$likeReaction->save();

$loveReaction = Reaction::createFromName('love');
$loveReaction->save();

React!

我们的模型准备好了。我们可以使用它们。如何使用?

// picking the first user, for this example...
$user = User::first();

// the previously created reaction
$likeReaction = Reaction::where('name', '=', 'like')->first();

// picking up a post...
$awesomePost = Post::first();

// react to it!
$user->reactTo($awesomePost, $likeReaction);

很简单,reactTo 方法会为你处理一切。

获取模型的点赞

就像你可以让一个实体对另一个实体进行点赞一样,你应该能够获取一个实体的所有点赞。

让我们看看如何做到这一点。

// picking up a post...
$awesomePost = Post::first();

// get all reactions
$reactions = $awesomePost->reactions;

$reactions 中,你将有一个 Reaction 模型的集合,可以立即使用。

获取点赞摘要

你可能不需要每次都获取特定实体点赞的所有信息。因此,我为你实现了 getReactionsSummary

// picking up a post...
$awesomePost = Post::first();

// get a summary of related reactions
$reactionsSummary = $awesomePost->getReactionsSummary();

$reactionsSummary 中,你将找到一个由两个属性组成的项的集合:namecount。想象一下,我们在控制器中做以下操作

$reactionsSummary = $awesomePost->getReactionsSummary();
return $reactionsSummary;

这就是我们将得到的结果

[
    {
        "name": "like",
        "count": 12
    },
    {
        "name": "love",
        "count": 7
    }
]

访问“响应者”

在 Facebook 上,你可以看到谁对某个帖子做出了某种反应。要获取这个“谁”,你可以使用 getResponder 方法。当然,这适用于使用 reactions 关系方法获取的每个反应。

假设有一个名为“Francesco”的用户已经对某个帖子使用了“喜欢”的反应。

// our awesome post.
$awesomePost = Post::first();

// every $reaction is a Reaction model
foreach($awesomePost->reactions as $reaction) 
{
    $user = $reaction->getResponder();
   
    // this will output "Francesco"
    echo $user->name;
}

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

测试

$ vendor/bin/phpunit

贡献

请参阅贡献指南行为准则以获取详细信息。

安全性

如果您发现任何与安全相关的问题,请通过电子邮件hellofrancesco@gmail.com联系,而不是使用问题跟踪器。

鸣谢

许可证

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