海外社媒SNS代运营Tiktok代运营公司
Revive Old Posts

营销型WordPress外贸多语言独立站建设+谷歌SEO优化+谷歌关键字广告投放,就找WP花园!深圳公司,技术实力雄厚,用效果说话!详情咨询info@wordpresshy.com

要在您的在线社区或博客中建立信任,您需要的一个关键要素是精心设计的 Laravel 实时评论系统。

但是,除非您依赖自托管的评论系统(例如 Disqus 或 Commento),否则第一次尝试就做对并不容易,每个系统都有其自身的缺点。 他们拥有您的数据,提供有限的设计和定制,最重要的是,他们不是免费的。

由于这些限制,如果构建实时评论系统的想法 – 具有控制数据,设计和自定义外观以适应您的博客的好处 – 吸引您,请继续阅读。

本文将教你如何开发一个精心设计的实时评论系统,具有不同的评论功能。 遵循使用Vue.js和Socket.io构建实时聊天应用程序的原则,我们将使用Laravel、Pusher和React开发实时评论系统。

让我们潜入吧!

我们将建造什么

我们将构建一个可以集成到任何网站或博客中的实时评论系统,以建立对社区的信任。

海外社媒SNS代运营Tiktok代运营公司

要在您的在线社区或博客中建立信任,您需要的一个关键要素是精心设计的 Laravel 实时评论系统。 💬 在这里学习如何开始 ⤵点击推文

构建块概述:Laravel、Pusher 和 Vue

在我们深入开发之前,让我们讨论一下我们将用于开发实时评论系统的技术。

Laravel

Laravel 是一个开源的面向 MVC 的 PHP 框架。 它用于构建以优雅语法而闻名的简单到复杂的 PHP Web 应用程序。 了解 Laravel 对构建这个评论系统至关重要。

推杆

Pusher 使开发人员能够大规模创建实时功能。 本文将结合 Laravel Echo 创建一个实时广播事件到 Pusher 服务器,并使用 Vue.js 在前端显示内容。

Vue.js

Vue.js 是我们选择的前端框架。 Vue.js 是一个渐进式 JavaScript 前端框架,以其易于学习和直接的前端开发方法而闻名。 我们将使用 Vue.js 来开发我们的实时评论系统。

构建评论系统

如果我们上面概述的评论系统听起来像您想要的,让我们继续构建它。

1. 安装和设置 Laravel、Pusher 和 Echo

Laravel、Echo 和 Pusher 的安装和设置非常简单,因为 Laravel 已经通过设置和配置 Laravel Echo 与 Pusher 完美配合来完成所有后台任务。

首先,我们将从安装和配置我们的后端 PHP 框架 Laravel 开始。 您可以使用此命令获取 Laravel 的新实例,前提是您已全局安装 Laravel CLI:

laravel new commenter

您的新 Laravel 实例将安装在名为 commenter 的文件夹中。 让我们在 VSCode 中打开文件夹并在终端中导航到它:

cd commenter

code .

在我们启动我们的开发服务器之前,让我们安装和配置一些将用于项目的必要包。

运行以下命令安装 Pusher PHP SDK:

composer require pusher/pusher-php-server

运行此命令为 Vue.js 前端安装必要的 NPM 包:

npm install --save laravel-echo pusher-js

接下来,我们将配置 Laravel Echo 和 Pusher。 打开你的 资源/js/bootstrap.js 文件并粘贴以下脚本:

window._ = require("lodash");
window.axios = require("axios");
window.moment = require("moment");
window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
window.axios.defaults.headers.post["Content-Type"] =
    "application/x-www-form-urlencoded";
window.axios.defaults.headers.common.crossDomain = true;
window.axios.defaults.baseURL = "/api";
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
    window.axios.defaults.headers.common["X-CSRF-TOKEN"] = token.content;
} else {
    console.error("CSRF token not found");
}


/**
 * Echo exposes an expressive API for subscribing to channels and listening
 * for events that Laravel broadcasts. Echo and event broadcasting
 * allows your team to build robust real-time web applications quickly.
 */
import Echo from "laravel-echo";
window.Pusher = require("pusher-js");
window.Echo = new Echo({
    broadcaster: "pusher",
    key: process.env.MIX_PUSHER_APP_KEY,
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    forceTLS: true
});

您会从上面的脚本中注意到,我们只是使用我们的默认配置来配置 Axios 实例。 接下来,我们将配置 Laravel Echo 以使用 Pusher 及其配置。

2. 数据库设置和迁移

接下来,我们将创建和设置我们的数据库来存储持久性的评论。 我们将使用 SQLite,但您可以使用您选择的任何数据库客户端。

创建一个 数据库.sqlite 数据库文件夹中的文件并更新您的 .env 文件如下:

DB_CONNECTION=sqlite
DB_DATABASE=/Users/all/paths/to/project/commenter_be/database/database.sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=

接下来,运行此命令以创建 Comment 迁移并使用以下脚本更新它:

php artisan make:migration create_comments_table

打开 数据库/迁移/xxxx_create_comments_table_xxxx.php 文件并粘贴此代码:

<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class CreateCommentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->id();
            $table->string('content');
            $table->string('author');
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('comments');
    }
}

这将创建一个新的评论数据库表并添加内容和作者列。

WordPress花园建议你也读一下这篇文章  代理与 VPN:哪个适合您?

最后,要创建迁移,请运行以下命令:

php artisan migrate

3. 创建模型

在 Laravel 中,模型很重要——它们是与我们的数据库通信和处理数据管理的最可靠方式。

要在 Laravel 中创建模型,我们将运行以下命令:

php artisan make:model Comment

接下来,打开 应用程序/模型/Comment.php 文件并粘贴以下代码:

<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Comment extends Model
{
    use HasFactory;
    protected $fillable = ['content', 'author'];
}

The $fillable array allows us to create and update the model in mass.

4. 创建控制器

控制器至关重要,因为它们包含我们应用程序的所有逻辑、业务和其他方面,所以让我们创建一个来处理评论逻辑:

php artisan make:controller CommentController

接下来,打开 应用程序/Http/Controllers/CommentController.php 文件并粘贴以下代码:

<?php
namespace AppHttpControllers;
use AppModelsComment;
use AppEventsCommentEvent;
use IlluminateHttpRequest;

class CommentController extends Controller
{
    //
    public function index()
    {
        return view('comments');
    }
    public function fetchComments()
    {
        $comments = Comment::all();
        return response()->json($comments);
    }
    public function store(Request $request)
    {
        $comment = Comment::create($request->all());
        event(new CommentEvent($comment));
        return $comment;
    }
}

控制器具有三种不同的方法:分别返回评论视图、获取所有评论和存储新评论。 最重要的是,我们每次存储新评论时都会触发一个事件,前端将使用 Pusher 和 Laravel Echo 实时监听新评论以更新相关页面。

5. 创建路由

为了正确配置我们的路由,我们需要更新很多文件,所以让我们开始吧。

首先,我们将更新 api.php 路径文件夹中的文件。 打开文件并添加以下代码:

use AppHttpControllersCommentController;
//...

Route::get('/', [CommentController::class, 'index']);
Route::get('/comments', [CommentController::class, 'fetchComments']);
Route::post('/comments', [CommentController::class, 'store']);

接下来,打开 频道.php 文件并添加以下代码来授权我们之前触发的事件:

Broadcast::channel('comment', function ($user) {
    return true;
});

接下来,打开 网页.php 在同一文件夹中创建文件并添加以下代码以将我们的请求重定向到主页,Vue.js 将在此处获取它:

use AppHttpControllersCommentController;
//...

Route::get('/', [CommentController::class, 'index']);

最后,我们将在 资源/观点 文件夹名为 评论.blade.php 并添加以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Commenter</title>
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.1/css/bulma.min.css" />
    <style>
        .container {
            margin: 0 auto;
            position: relative;
            width: unset;
        }
        #app {
            width: 60%;
            margin: 4rem auto;
        }
        .question-wrapper {
            text-align: center;
        }
    </style>
</head>
<body>


    <div id="app">
        <div class="container">
            <div class="question-wrapper">
                <h5 class="is-size-2" style="color: #220052;">
                    What do you think about <span style="color: #47b784;">Dogs</span>?</h5>
                <br>
                <a href="#Form" class="button is-medium has-shadow has-text-white" style="background-color: #47b784">Comment</a>
            </div>
            <br><br>
            <comments></comments>
            <new-comment></new-comment>
        </div>
    </div>
    <script async src="{{mix('js/app.js')}}"></script>
</body>
</html>

该脚本添加了一个帖子标题和一个 Vue 组件,以显示上面创建的帖子标题并向其添加新评论。

运行以下命令来测试您是否正确获取了所有内容:

npm run watch

php artisan serve

如果您看到此页面,则您已准备好进入本文的下一步。

Laravel 中的实时评论系统

Laravel 中的实时评论系统

6. 设置 Vue(前端)

我们将创建和设置我们的 Vue 实例来创建和显示对这篇文章所做的所有评论。

我们将从设置我们的 Vuex 商店开始。 在资源/js/store 文件夹中创建以下文件。

创建评论状态

创建 actions.js 并添加以下代码:

let actions = {
    ADD_COMMENT({ commit }, comment) {
        return new Promise((resolve, reject) => {
            axios
                .post(`/comments`, comment)
                .then(response => {
                    resolve(response);
                })
                .catch(err => {
                    reject(err);
                });
        });
    },
    GET_COMMENTS({ commit }) {
        axios
            .get("/comments")
            .then(res => {
                {
                    commit("GET_COMMENTS", res.data);
                }
            })
            .catch(err => {
                console.log(err);
            });
    }
};
export default actions;

Action 文件调用后端中的注释端点。

接下来,创建一个 getters.js 文件并添加以下代码:

let getters = {
    comments: state => {
        return state.comments;
    }
};
export default getters;

Getter 文件用于检索状态中的所有注释。

创建 mutations.js 文件并将其粘贴到以下代码中:

let mutations...

营销型WordPress外贸多语言独立站建设+谷歌SEO优化+谷歌关键字广告投放,就找WP花园!深圳公司,技术实力雄厚,用效果说话!详情咨询info@wordpresshy.com

海外社媒SNS代运营Tiktok代运营公司
Revive Old Posts