kesty / laravel-reactions
Requires
- php: ^8.0
- illuminate/database: ~5.5|~5.6|~5.7|~5.8|^6.0|^7.0|^8.0|^9.0
- illuminate/support: ~5.5|~5.6|~5.7|~5.8|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.9
- mockery/mockery: ^1.5
- orchestra/testbench: ^7.6
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-29 05:57:15 UTC
README
Laravel Reactions 是您需要实现 Eloquent 模型反应的包,类似于您在 Facebook 上看到的。
功能
- 易于安装,无需配置;
- 现成的特性;
- 您可以为多个实体实现反应,多亏了多态的多对多关系;
- 您可以从多个实体实现反应,多亏了底下的额外魔法;
免责声明
本项目与 Facebook 没有任何关联。 我只是使用 "反应" 来提供一个概念。如果有法律问题,请通过电子邮件告知。
安装
使用 Composer 安装此包。
$ composer require kesty/laravel-reactions
将服务提供者添加到您的 config/app.php
文件中。
Kesty\LaravelReactions\Providers\ReactionsServiceProvider::class,
运行迁移以创建 reactions
和 reactables
表。
$ php artisan migrate
您已经准备就绪。
使用方法
将特性添加到模型中
要使用此包,您需要遵循两个步骤
- 将
Kesty\LaravelReactions\Traits\Reacts
特性添加到将要对某物进行反应的实体中; - 将
Kesty\LaravelReactions\Traits\Reactable
特性添加到将要 "接收" 反应的实体中; - 确保接收反应的实体也实现了
Kesty\LaravelReactions\Contracts\ReactableInterface
;
让我们做一个例子。
假设您在应用程序中有些用户。您正在构建一个博客,所以您将拥有帖子。
您想允许用户为您的帖子添加反应。就像 Facebook 一样,您知道。
假设我们有两个模型:User
和 Post
。
按照步骤,我们首先将 Kesty\LaravelReactions\Traits\Reacts
特性添加到我们的 User
模型中。
use Kesty\LaravelReactions\Traits\Reacts; class User extends Model { use Reacts; }
完成!现在,让我们转到 Post
模型!
use Kesty\LaravelReactions\Traits\Reactable; use Kesty\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
中,您将找到由两个属性组成的项集合:name
和 count
。想象一下,我们在控制器中执行以下代码:
$reactionsSummary = $awesomePost->getReactionsSummary(); return $reactionsSummary;
这就是我们将得到的结果
[ { "name": "like", "count": 12 }, { "name": "love", "count": 7 } ]
访问 "回应者"
当在 Facebook 上时,您可以看到 "谁" 以某种方式对帖子进行了反应。要获取这个 "谁",您可以使用 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
贡献
请参阅CONTRIBUTING和CONDUCT获取详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件vickkycodegennius@gmail.com联系,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。