fabrizio / commentator
一个Laravel包,让您可以在页面中添加评论区域。
Requires
- php: ^7.2||^8.0
- illuminate/support: ~6.0|~7.0|~8.0
- stevebauman/purify: ^3.0
Requires (Dev)
- mockery/mockery: ^1.1
- orchestra/testbench: ~3|~4|~5
- phpunit/phpunit: ^8.0
- sempro/phpunit-pretty-print: ^1.0
This package is auto-updated.
Last update: 2024-09-14 22:06:57 UTC
README
如果您需要在项目中添加评论,这里有一些开始的方法。
演示
在这个演示项目中尝试。
安装
$ composer require fabrizio/commentator
运行以下命令以发布配置和迁移文件。
php artisan vendor:publish --provider="Plmrlnsnts\Commentator\CommentatorServiceProvider"
运行迁移。
php artisan migrate
接下来,在您的AppServiceProvider
的boot
方法中注册路由以管理评论。
use Plmrlnsnts\Commentator\Commentator; public function boot() { Commentator::routes(); }
使用方法
将HasComments
特质添加到您的eloquent模型中。
use Plmrlnsnts\Commentator\HasComments; class Article extends Model { use HasComments; }
评论
要向模型添加评论,请使用addComment
方法。
$article = Article::first(); $article->addComment(['body' => 'Better call Saul!']);
如果您也支持媒体文件,请传递一个额外的media
属性。
$article->addComment([ 'body' => 'Yo Mr. White! Check this out.', 'media' => 'https://unsplash.com/photos/yplNhhXxBtM', ]);
提及
用户可以使用@
符号,后跟一组字母数字字符、下划线和连字符来提及。
$comment = $article->addComment(['body' => '@Pinkman']);
调用mentionedNames
方法以检索提及数组。
$comment->mentionedNames(); // ['Pinkman']
通过调用评论实例的asHtml
将提及转换为锚点标签。
$comment->asHtml(); // <a href="/profile/Pinkman">@Pinkman</a>
asHtml
会去除任何HTML元素(除了锚点标签)以防止xss攻击。
回复
如果您想支持嵌套评论,请使用addReply
方法。
$comment->addReply(['body' => 'I am Heisenberg.']);
JSON API
Commentator提供JSON API,您可以使用它来管理评论。这样,您就不必手动编写用于创建、更新和删除评论的控制器。
GET /comments
此路由返回给定模型的分页评论列表。您需要传递commentableKey
,以及一个可选的sort
参数以按最新
顺序排序结果。
const params = { commentableKey: 'SOMESTRING', sort: 'latest', page: 1, perPage: 10, } axios.get('/comments', { params }) .then(response => { console.log(response.data) })
POST /comments
此路由用于创建新评论。它接受两个数据:正文和/或媒体。
const data = { body: 'Yo, Mr. White! Check this out.', media: 'https://unsplash.com/photos/yplNhhXxBtM', commentableKey: 'SOMESTRING', } axios.post('/comments', data) .then(response => { console.log(response.data) })
PATCH /comments/{comment}
此路由用于更新评论。它接受两个数据:正文和/或媒体。
const data = { body: 'Changed', } axios.patch(`/comments/${commment.id}`, data) .then(response => { console.log(response.data) })
只有由认证用户拥有的评论才能更新。
DELETE /comments/{comment}
此路由用于删除评论。
axios.delete(`/comments/${commment.id}`) .then(response => { // })
只有由认证用户拥有的评论才能删除。
GET /comments/{comment}/replies
此路由返回评论的分页回复列表。您可以通过传递一个可选的sort
参数来按最新
顺序排序结果。
const params = { sort: 'latest', page: 1, perPage: 10, } axios.get(`/comments/${comment.id}/replies`, { params }) .then(response => { console.log(response.data) })
POST /comments/{comment}/replies
此路由用于回复评论。它接受两个数据:正文和/或媒体。
const data = { body: 'Yo, Mr. White! Check this out.', media: 'https://unsplash.com/photos/yplNhhXxBtM', } axios.post(`/comments/${comment.id}/replies`, data) .then(response => { console.log(response.data) })
回复也是评论!因此,您可以使用相同的路由来更新和删除回复。
配置
用户模型
当添加评论时,Commentator引用当前的User
模型作为作者。如果您使用不同的命名空间,请在config/commentator.php
中更改它们。
return [ 'models' => [ 'user' => \App\Models\User::class ] ];
提及
用于识别提及的正则表达式以及解析的链接可以从config
文件中修改。
return [ 'mentions' => [ 'regex' => '/@([\w\-]+)/', 'replace' => '<a href="/profile/$1">@$1</a>' ] ];