eslamfaroug/laravel_comments

使用此包,您可以为Eloquent模型创建评论并关联它们。

v1.3 2023-08-08 14:57 UTC

This package is auto-updated.

Last update: 2024-09-08 17:07:48 UTC


README

LaravelComments是一个Laravel包。有了它,您可以轻松实现应用的原生评论功能。

Become a Patron

概述

此包可用于对应用中的任何模型进行评论。

所有评论都存储在单个表中,具有多态关系的内容和发布评论的用户的多态关系。

功能

  • 查看评论
  • 创建评论
  • 删除评论
  • 编辑评论
  • 回复评论
  • 授权规则
  • 支持本地化
  • 触发事件
  • 路由、控制器、评论、迁移与视图定制
  • 支持非整数ID
  • 支持多个用户模型
  • 解决了N+1查询问题
  • 评论审核(可选)
  • 访客评论(可选)
  • 分页(可选)
  • 软删除(可选)
  • 支持自定义ID列
  • 可选加载包迁移 [新功能]
  • 配置最大缩进级别 [新功能]

屏幕截图

以下是几个截图。

无评论 & 访客

无评论 & 登录用户

一条评论

一条评论编辑表单

来自不同用户的两条评论

教程与文章

我计划扩展这一章节,加入更多教程和文章。如果你为此包写了什么,请告诉我,这样我可以更新这一章节。

屏幕录制

安装

从命令行

composer require eslamfaroug/laravel_comments

发布配置 & 配置(可选)

发布文件

php artisan vendor:publish --provider="EslamFaroug\LaravelComments\ServiceProvider"

运行迁移

我们需要创建评论表。

php artisan migrate

将Commenter特质添加到User模型

Commenter特质添加到User模型,以便您可以检索用户的评论

use EslamFaroug\LaravelComments\Commenter;

class User extends Authenticatable
{
    use Notifiable, Commenter;
}

将Commentable特质添加到模型

Commentable特质添加到您想启用评论的模型

use EslamFaroug\LaravelComments\Commentable;

class Product extends Model
{
    use Commentable;
}

用法

在您想显示评论的视图中,放置此代码并进行修改

@comments(['model' => $book])

在上面的示例中,我们将commentable_type设置为书籍的类。我们还将传递commentable_id,即书籍的id,以便我们知道评论与哪本书相关。幕后,该包会检测当前是否已登录用户。

如果您打开包含上述代码的视图页面,应该看到一个工作的评论表单。

仅查看已审核的评论

要查看仅审核过的评论,请使用此代码

@comments([
    'model' => $book,
    'approved' => true
])

分页评论

分页仅按顶级评论分页,这意味着如果您指定每页的评论数为1,并且有一个评论有100条回复,则将显示该评论及其所有回复。

无法以其他方式完成,因为如果按所有评论(父级和子级)分页,您将得到空白页面,因为评论组件首先循环父级评论,然后使用递归进行回复。

要使用分页,请使用此代码

@comments([
    'model' => $user,
    'perPage' => 2
])

2替换为您想要的任何数字。

配置最大缩进级别

默认情况下,回复可以到达第三级。之后它们在该级别“混合”。

- 0
    - 1
        - 2
            - 3

您可以按如下方式配置最大缩进级别

@comments([
    'model' => $user,
    'maxIndentationLevel' => 1
])

事件

此包通过触发事件来通知您何时发生某些事情。

  • EslamFaroug\LaravelComments\Events\CommentCreated
  • EslamFaroug\LaravelComments\Events\CommentUpdated
  • EslamFaroug\LaravelComments\Events\CommentDeleted

REST API

要更改控制器或路由,请参阅配置。

Route::post('comments', '\EslamFaroug\LaravelComments\CommentController@store')->name('comments.store');
Route::delete('comments/{comment}', '\EslamFaroug\LaravelComments\CommentController@destroy')->name('comments.destroy');
Route::put('comments/{comment}', '\EslamFaroug\LaravelComments\CommentController@update')->name('comments.update');
Route::post('comments/{comment}', '\EslamFaroug\LaravelComments\CommentController@reply')->name('comments.reply');

POST /comments

请求数据

'commentable_type' => 'required|string',
'commentable_id' => 'required|string|min:1',
'message' => 'required|string'

PUT /comments/{comment}

  • {comment} - 评论ID。

请求数据

'message' => 'required|string'

POST /comments/{comment}

  • {comment} - 评论ID。

请求数据

'message' => 'required|string'

从旧版本升级(故障排除)

在创建问题之前,请阅读这里

赞助商与支持者

我要感谢以下赞助商和支持者,他们为我开源之旅提供了资金。如果您有兴趣成为赞助商或支持者,请访问支持者页面

贡献

感谢您考虑为LaravelComments做出贡献!贡献指南可以在这里找到。

行为准则

为了确保开源社区对所有人都友好,请查阅并遵守行为准则

许可

LaravelComments是开源软件,根据MIT许可授权。