nr-type / like-dislike
这是一个为想要在应用程序中使用点赞和踩应用的开发者准备的包,这是实现该功能的最佳方式。
README
关于包
这是一个为想要在应用程序中使用点赞和踩应用的开发者准备的包,这是实现该功能的最佳方式。
安装
此包可以通过Composer在您的应用程序中安装
运行以下命令。
composer require nr-type/like-dislike
迁移
之后运行迁移命令
php artisan migrate
模型使用
您想要添加点赞和踩的模型。您只需要使用 NrType\LikeDislike\Traits\Likeable
和 NrType\LikeDislike\Traits\Dislikeable
。并在类内部使用 Likeable
和 Dislikeable
。
use NrType\LikeDislike\Traits\Likeable; use NrType\LikeDislike\Traits\Dislikeable; class Post extends Model { use Likeable, Dislikeable; }
您可以在多个 Model
中使用点赞和踩选项
多个 Model
可以是 Comment
、Video
、Photo
。
use NrType\LikeDislike\Traits\Likeable; use NrType\LikeDislike\Traits\Dislikeable; class Comment extends Model { use Likeable, Dislikeable; }
可选
假设您只需要在应用程序中使用点赞选项。那么您可以使用 NrType\LikeDislike\Traits\Likeable
和 Likeable
。
use NrType\LikeDislike\Traits\Likeable; class Post extends Model { use Likeable; }
兼容性
Like
和 Dislike
可以单独使用,也可以同时使用,例如有人点赞了帖子,之后又决定不再点赞,他/她只需点击踩按钮,就会在该帖子上去掉点赞并踩。
控制器中的使用
点赞
在帖子中使用点赞选项,例如点赞两行代码。
public function like (Post $post) { $post->like(); return redirect()->route('posts.index'); }
但是
假设您希望某人点击点赞按钮后,它会点赞该帖子,然后他又点击了点赞按钮,它会取消点赞该帖子。那么这里就是 removeLike()
。如果用户已经点赞了该帖子,它将在同一方法中移除该点赞,或者您也可以创建另一个路由和方法来取消点赞该帖子。
public function like (Post $post) { if($post->removeLike()){ return redirect()->route('posts.index'); } $post->like(); return redirect()->route('posts.index'); }
踩
在帖子中使用踩与点赞相同。对于踩选项,您还有 dislike()
和 removeDislike()
。
public function dislike (Post $post) { $post->dislike(); return redirect()->route('posts.index'); }
或者
public function dislike (Post $post) { if ($post->removeDislike()) { return redirect()->route('posts.index'); } $post->dislike(); return redirect()->route('posts.index'); }
帖子的点赞者和踩者
您可以通过 likers()
和 dislikers()
容易地访问点赞者和踩者。默认情况下,它将返回来自 users
表的用户 id
和 name
。
public function likers (Post $post) { return $post->likers(); }
或者
public function dislikers (Post $post) { return $post->dislikers(); }
现在这里有几点要注意的
likers()
和 dislikers()
默认返回 id
和 name
,但您可能不需要 id
,您可能只需要 name
,或者您的用户数据库表可能没有 name
字段,可能是 first_name
、last_name
或其他,或者您可能需要更多字段。这里有一个解决方案。您只需在方法中传递一个 数组
,它将返回用户表中的那些字段数据。
public function likers (Post $post) { $fields = ['id','first_name','last_name','age']; return $post->likers($fields); }
或者
public function dislikers (Post $post) { $fields = ['id','name','age']; return $post->dislikers($fields); }
控制器中的 with()
关联调用
您可以在帖子中显示 likes
、dislikes
,也可以使用 likeCounter
、dislikeCounter
来显示帖子的点赞和踩数。
public function index() { $relations = ['likes','likeCounter','dislikes','dislikeCounter']; $data['posts'] = Post::with($relations)->get(); return view('post.index', $data); }
或者
例如,您可能对帖子的 comments
有评论,您需要 comments
以及特定 comment
的点赞和帖子的点赞数。那么您可以使用 comments.likes
和 comments.likeCounter
。
public function index() { $relations = [ 'likes', 'likeCounter', 'dislikes', 'dislikeCounter', 'comments.likes', 'comments.likeCounter' ]; $data['posts'] = Post::with($relations)->get(); return view('post.index', $data); }
其他选项
hasLike()
和 hasDislike()
用于检查登录用户是否在帖子或评论中点赞或踩。它返回 布尔值
。您也可以在 blades 文件中使用 hasLike()
和 hasDislike()
。
{{ $post->hasLike() ? 'Liked' : 'Like' }} {{ $post->hasDislike() ? 'Disliked' : 'Dislike' }}
许可
“喜欢/不喜欢桶”是开源软件,遵循MIT许可证。