FastComments.com

Add Comments to Your Laravel App

ื–ื• ื—ื‘ื™ืœืช ื”-Laravel ื”ืจืฉืžื™ืช ืฉืœ FastComments.

ื”ื•ืกืฃ ืชื’ื•ื‘ื•ืช ื‘ื–ืžืŸ ืืžืช, ืฆ'ืื˜ ื•ืขื•ื“ ืœื™ื™ืฉื•ื ื”-Laravel ืฉืœืš.

ืžืื’ืจ

ืฆืคื” ื‘-GitHub

ื“ืจื™ืฉื•ืช Internal Link


  • PHP 8.1+
  • Laravel 10, 11, ืื• 12

ื”ืชืงื ื” Internal Link

composer require fastcomments/laravel

ืคืจืกื ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”:

php artisan vendor:publish --tag=fastcomments-config

ื”ื•ืกืฃ ืืช ื”ืื™ืฉื•ืจื™ื ืฉืœืš ืœ-.env:

FASTCOMMENTS_TENANT_ID=your-tenant-id
FASTCOMMENTS_API_KEY=your-api-key

ืœืื–ื•ืจ ื”ืื™ื—ื•ื“ ื”ืื™ืจื•ืคื™:

FASTCOMMENTS_REGION=eu

ืจื›ื™ื‘ื™ Blade Internal Link

ื•ื•ื™ื“ื’'ื˜ ืชื’ื•ื‘ื•ืช

<x-fastcomments />

{{-- ืขื ืืคืฉืจื•ื™ื•ืช --}}
<x-fastcomments
    url-id="my-page-id"
    url="https://example.com/my-page"
    locale="en_us"
    :has-dark-background="true"
    default-sort-direction="MR"
/>

ืฆ'ืื˜ ื—ื™

<x-fastcomments-live-chat url-id="chat-room-1" />

ืžืกืคืจ ืชื’ื•ื‘ื•ืช

<x-fastcomments-comment-count url-id="my-page-id" />
<x-fastcomments-comment-count url-id="my-page-id" :number-only="true" />

ื›ื ื™ืกื” ืื—ื•ื“ื” (SSO) Internal Link


ื”ืคืขืœ SSO ื‘ืงื•ื‘ืฅ .env:

FASTCOMMENTS_API_KEY=your-api-key
FASTCOMMENTS_SSO_ENABLED=true
FASTCOMMENTS_SSO_MODE=secure

ืžืคืชื— ื”-API ื ื“ืจืฉ ืขื‘ื•ืจ SSO ืžืื•ื‘ื˜ื— โ€” ื”ื•ื ืžืฉืžืฉ ืœื—ืชื™ืžืช ืžื˜ืขืŸ ื”-SSO.

ืžื™ืคื•ื™ ืžื‘ื•ืกืก ืงื•ื ืคื™ื’ื•ืจืฆื™ื”

ื‘-config/fastcomments.php, ืžื™ืคื• ืืช ืฉื“ื•ืช FastComments ืœืฉื“ื•ืช ื‘ืžื•ื“ืœ ื”ืžืฉืชืžืฉ ืฉืœื›ื:

'sso' => [
    'enabled' => true,
    'mode' => 'secure',
    'user_map' => [
        'id' => 'id',
        'email' => 'email',
        'username' => 'name',
        'avatar' => 'profile.avatar_url', // ื ื•ื˜ืฆื™ื™ืช ื ืงื•ื“ื•ืช ื ืชืžื›ืช
    ],
    'is_admin' => fn ($user) => $user->hasRole('admin'),
    'is_moderator' => fn ($user) => $user->hasRole('moderator'),
],

ืžื™ืคื•ื™ ืžื‘ื•ืกืก ืžืžืฉืง

ืœืงื‘ืœืช ืฉืœื™ื˜ื” ืจื‘ื” ื™ื•ืชืจ, ื™ื™ืฉืžื• ืืช ื”ืžืžืฉืง MapsToFastCommentsUser ืขืœ ืžื•ื“ืœ ื”ืžืฉืชืžืฉ ืฉืœื›ื:

use FastComments\Laravel\SSO\Contracts\MapsToFastCommentsUser;

class User extends Authenticatable implements MapsToFastCommentsUser
{
    public function toFastCommentsUserData(): array
    {
        return [
            'id' => (string) $this->id,
            'email' => $this->email,
            'username' => $this->display_name,
            'avatar' => $this->avatar_url,
            'is_admin' => $this->hasRole('admin'),
        ];
    }
}

ื›ืืฉืจ ื”ืžืžืฉืง ืžื™ื•ืฉื, ื”ื•ื ืžืงื‘ืœ ืขื“ื™ืคื•ืช ืขืœ ืคื ื™ ื”ืžื™ืคื•ื™ ื”ืžื‘ื•ืกืก ืงื•ื ืคื™ื’ื•ืจืฆื™ื”.

SSO ื‘-Blade

ื›ืฉ-SSO ืžื•ืคืขืœ, ื”ืจื›ื™ื‘ <x-fastcomments /> ืžื–ืจื™ืง ืื•ื˜ื•ืžื˜ื™ืช ื ืชื•ื ื™ SSO ืขื‘ื•ืจ ื”ืžืฉืชืžืฉ ืฉืื•ืžืช.

ื’ื™ืฉื” ืœ-API Internal Link

ื‘ืืžืฆืขื•ืช ื”-Facade

use FastComments\Laravel\Facades\FastComments;

// ืžืžืฉืง Admin (ื“ื•ืจืฉ ืžืคืชื— API)
$comments = FastComments::admin()->getComments('tenant-id');

// ืžืžืฉืง ืฆื™ื‘ื•ืจื™
$comments = FastComments::publicApi()->getCommentsPublic('tenant-id', 'url-id');

// SSO
$ssoPayload = FastComments::sso()->forWidget();
$token = FastComments::sso()->tokenFor($user);

ื‘ืืžืฆืขื•ืช ื”ื–ืจืงืช ืชืœื•ื™ื•ืช

use FastComments\Laravel\FastCommentsManager;

class CommentController extends Controller
{
    public function index(FastCommentsManager $fc)
    {
        $comments = $fc->admin()->getComments($fc->tenantId());
        // ...
    }
}

ื’ื™ืฉื” ื™ืฉื™ืจื” ืœ-SDK

use FastComments\Client\Api\DefaultApi;

class CommentController extends Controller
{
    public function index(DefaultApi $api)
    {
        $comments = $api->getComments('tenant-id');
        // ...
    }
}

ืžื“ืจื™ืš ืชืฆื•ืจื” Internal Link

ืžืคืชื— ืžืฉืชื ื” ืกื‘ื™ื‘ื” ื‘ืจื™ืจืช ืžื—ื“ืœ ืชื™ืื•ืจ
tenant_id FASTCOMMENTS_TENANT_ID '' ืžื–ื”ื” ื”ืฉื•ื›ืจ (tenant) ืฉืœืš ื‘-FastComments
api_key FASTCOMMENTS_API_KEY '' ืžืคืชื— API ืœืงืจื™ืื•ืช ื‘ืฆื“ ื”ืฉืจืช
region FASTCOMMENTS_REGION null null (ืืจื”"ื‘) ืื• 'eu'
sso.enabled FASTCOMMENTS_SSO_ENABLED false ื”ืคืขืœ SSO
sso.mode FASTCOMMENTS_SSO_MODE 'secure' 'secure' ืื• 'simple'
sso.login_url FASTCOMMENTS_SSO_LOGIN_URL null ื›ืชื•ื‘ืช URL ืœื›ื ื™ืกื” (ืชื—ื–ื•ืจ ืœื ืชื™ื‘ ืฉืœ Laravel)
sso.logout_url FASTCOMMENTS_SSO_LOGOUT_URL null ื›ืชื•ื‘ืช URL ืœื”ืชื ืชืงื•ืช (ืชื—ื–ื•ืจ ืœื ืชื™ื‘ ืฉืœ Laravel)
widget_defaults โ€” [] ื”ื’ื“ืจื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืœื•ื•ื™ื“ื’'ื˜

ื”ืชืืžืช ืชืฆื•ื’ื•ืช Internal Link

ื›ื“ื™ ืœื”ืชืื™ื ืื™ืฉื™ืช ืืช ืชื‘ื ื™ืช Blade:

php artisan vendor:publish --tag=fastcomments-views

ื”ืชื‘ื ื™ื•ืช ื™ืคื•ืจืกืžื• ืœ-resources/views/vendor/fastcomments/.

ื–ืงื•ืงื™ื ืœืขื–ืจื”?

ืื ืชื™ืชืงืœื• ื‘ื‘ืขื™ื•ืช ืื• ื™ื”ื™ื• ืœื›ื ืฉืืœื•ืช ืœื’ื‘ื™ ื—ื‘ื™ืœืช Laravel, ืื ื:

ืชืจื•ืžื•ืช

ืชืจื•ืžื•ืช ืžืชืงื‘ืœื•ืช ื‘ื‘ืจื›ื”! ืื ื ื‘ืงืจื• ื‘-ืžืื’ืจ GitHub ืœืงื‘ืœืช ื”ื ื—ื™ื•ืช ืœืชืจื•ืžื”.