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 是您实现类似 Facebook 的 Eloquent 模型反应所需的包。

功能

  • 易于安装,无需配置;
  • 可直接使用的特性;
  • 您可以通过多态的多对多关系为多个实体实现反应;
  • 您可以通过一些额外的内部魔法从多个实体实现反应;

免责声明

该项目与 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 上时,您可以看到对某个帖子进行某种反应的 "谁"。要获取这个 who,您可以使用 getResponder 方法。当然,这适用于您使用 reactions 关系方法获取的每个反应。

假设一个名为 "Francesco" 的 User 已经对一条帖子使用了 "喜欢" 反应。

// 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;
}

变更日志

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

测试

$ vendor/bin/phpunit

贡献

请参阅CONTRIBUTINGCONDUCT以获取详细信息。

安全性

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

致谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。