fabrizio/commentator

一个Laravel包,让您可以在页面中添加评论区域。

dev-master 2021-11-14 15:46 UTC

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

接下来,在您的AppServiceProviderboot方法中注册路由以管理评论。

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>'
    ]
];