devdojo / laravel-reactions
Requires
- php: ^8.1|^8.2
- illuminate/database: ^9.0|^10.0|^11.0
- illuminate/support: ^9.0|^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.35
- mockery/mockery: ^1.6
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^9.5.0
README
Laravel Reactions 是您实现类似 Facebook 的 Eloquent 模型反应所需的包。
功能
- 易于安装,无需配置;
- 可直接使用的特性;
- 您可以通过多态的多对多关系为多个实体实现反应;
- 您可以通过一些额外的内部魔法从多个实体实现反应;
免责声明
该项目与 Facebook 没有任何关联。 我只是使用 "反应" 这个词来传达一个概念。如有法律问题,请通过电子邮件告知。
安装
使用 Composer 安装此包。
$ composer require DevDojo/laravel-reactions
将服务提供者添加到您的 config/app.php
文件。
DevDojo\LaravelReactions\Providers\ReactionsServiceProvider::class,
运行迁移以创建 reactions
和 reactables
表。
$ php artisan migrate
您已经准备好开始使用了。
用法
向模型添加特性
要使用此包,您需要遵循以下两个步骤
- 将
DevDojo\LaravelReactions\Traits\Reacts
特性添加到将要进行反应的实体; - 将
DevDojo\LaravelReactions\Traits\Reactable
特性添加到将要 "接收" 反应的实体; - 确保接收反应的实体也实现了
DevDojo\LaravelReactions\Contracts\ReactableInterface
;
让我们做一个例子。
假设您在应用程序中有些用户。您正在构建一个博客,因此您将拥有帖子。
您想允许您的用户对您的帖子添加反应。就像 Facebook 一样,您知道的。
假设我们有两个模型:User
和 Post
。
按照步骤,我们首先将 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
中,您将找到由两个属性组成的项:name
和 count
。想象一下,在一个控制器中我们做以下代码
$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
贡献
请参阅CONTRIBUTING和CONDUCT以获取详细信息。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件hellofrancesco@gmail.com联系,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。