nr-type/like-dislike

这是一个为想要在应用程序中使用点赞和踩应用的开发者准备的包,这是实现该功能的最佳方式。

1.0.1 2022-02-11 06:24 UTC

This package is auto-updated.

Last update: 2024-09-14 17:26:50 UTC


README

Issues Stars Forks Tags License Twitter

关于包

这是一个为想要在应用程序中使用点赞和踩应用的开发者准备的包,这是实现该功能的最佳方式。

安装

此包可以通过Composer在您的应用程序中安装

运行以下命令。
composer require nr-type/like-dislike

迁移

之后运行迁移命令

php artisan migrate

模型使用

您想要添加点赞和踩的模型。您只需要使用 NrType\LikeDislike\Traits\LikeableNrType\LikeDislike\Traits\Dislikeable。并在类内部使用 LikeableDislikeable

use NrType\LikeDislike\Traits\Likeable;
use NrType\LikeDislike\Traits\Dislikeable;

class Post extends Model
{
    use Likeable, Dislikeable;
}
您可以在多个 Model 中使用点赞和踩选项

多个 Model 可以是 CommentVideoPhoto

use NrType\LikeDislike\Traits\Likeable;
use NrType\LikeDislike\Traits\Dislikeable;

class Comment extends Model
{
    use Likeable, Dislikeable;
}

可选

假设您只需要在应用程序中使用点赞选项。那么您可以使用 NrType\LikeDislike\Traits\LikeableLikeable

use NrType\LikeDislike\Traits\Likeable;

class Post extends Model
{
    use Likeable;
}

兼容性

LikeDislike 可以单独使用,也可以同时使用,例如有人点赞了帖子,之后又决定不再点赞,他/她只需点击踩按钮,就会在该帖子上去掉点赞并踩。

控制器中的使用

点赞

在帖子中使用点赞选项,例如点赞两行代码。

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 表的用户 idname

public function likers (Post $post)
{
    return $post->likers(); 
}

或者

public function dislikers (Post $post)
{
    return $post->dislikers(); 
}

现在这里有几点要注意的

likers()dislikers() 默认返回 idname,但您可能不需要 id,您可能只需要 name,或者您的用户数据库表可能没有 name 字段,可能是 first_namelast_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() 关联调用

您可以在帖子中显示 likesdislikes,也可以使用 likeCounterdislikeCounter 来显示帖子的点赞和踩数。

public function index()
{
    $relations = ['likes','likeCounter','dislikes','dislikeCounter'];

    $data['posts'] = Post::with($relations)->get();

    return view('post.index', $data);
}

或者

例如,您可能对帖子的 comments 有评论,您需要 comments 以及特定 comment 的点赞和帖子的点赞数。那么您可以使用 comments.likescomments.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许可证