برنامه نویسی

ساخت یک برنامه چت بلادرنگ با استفاده از Laravel Reverb و Vue

Summarize this content to 400 words in Persian Lang
نوشته شده توسط روزاریو دی کیارا✏️

Laravel Reverb یک چارچوب وب سوکت بلادرنگ است که رویدادها را از لاراول به فرانت‌اند پخش می‌کند. این امکان همگام سازی بلادرنگ داده ها را در بین مشتریان متصل بدون بارگیری مجدد صفحه فراهم می کند. Vue یک چارچوب جاوا اسکریپت است که اجازه می دهد تا یک تجربه ظاهری واکنشی و مبتنی بر مؤلفه داشته باشید.

در این راهنما، ساختن یک برنامه چت کاملاً کاربردی و بلادرنگ را با استفاده از باطن Laravel Reverb و Frontend واکنشی Vue بررسی خواهیم کرد. طبق معمول، کد نهایی و عملکردی در این مخزن GitHub موجود است.

راه اندازی پیش نیازهای Laravel و Vue

قبل از شروع توسعه، باید محیطی متشکل از دو مؤلفه راه اندازی کنید: لاراول که مبتنی بر PHP است و مؤلفه Vue/Node.

PHP: نسخه 8.2 یا بالاتر (اجرا شود php -v برای بررسی نسخه)
آهنگساز (اجرا composer برای بررسی وجود آن)
Node.js: نسخه 20 یا بالاتر (اجرا شود node -v برای بررسی نسخه)

در تصویر زیر می توانید خروجی دستور بالا را در دستگاه ویندوز من مشاهده کنید:

برای پایگاه داده، ما از SQLite استفاده خواهیم کرد، پس حتما آن را در خود فعال کنید php.ini فایل هنگامی که تمام پیش نیازهای اساسی را برآورده کردید، می توانید با استفاده از موارد زیر یک پروژه لاراول ایجاد کنید:

> composer create-project laravel/laravel:^11.0 laravel_chat_demo

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از آماده سازی ریشه پروژه خود برای شروع توسعه، ممکن است نیاز به نصب برخی الزامات بیشتری داشته باشید. این فرآیند به محیط خاص شما بستگی دارد، اما، به طور کلی، سعی کنید خود را بسازید composer دستور happy (🙂)، اگر شکایت کرد (یا فقط به شما هشدار داد) که بسته ای از دست رفته است، آن بسته را نصب کنید (Google دوست شماست).

وقتی همه چیز درست شد، باید بتوانید موارد زیر را اجرا کنید:

> php artisan serve

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این محیط توسعه شما را روشن می کند.

ساخت مدل داده برای پیام های چت

اکنون که محیط توسعه (امیدوارم) خوب است، می‌توانیم روی بخش محرک توسعه تمرکز کنیم.

ما در حال نوشتن یک برنامه وب چت هستیم تا بتوانیم انتظار مدیریت پیام ها را داشته باشیم. با دستور زیر یک کلاس کاملاً جدید در قسمت دریافت می کنیم /app/Models که نشان دهنده پیام های رد و بدل شده در چت ما خواهد بود:

> php artisan make:model -m Message

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در حال حاضر کلاس خالی است. ما آن را با داده ها و عملکردها تخصصی خواهیم کرد، بنابراین فایل را جایگزین کنید Message.php با کد زیر:

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Message extends Model
{
use HasFactory;

public $table = ‘messages’;
protected $fillable = [‘id’, ‘user_id’, ‘text’];

public function user(): BelongsTo
{
return $this->belongsTo(User::class, ‘user_id’);
}

public function getTimeAttribute(): string
{
return date(
“d M Y, H:i:s”,
strtotime($this->attributes[‘created_at’])
);
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد بالا پیامی را در سیستم ما توصیف می کند: پیام ها در جدولی که نامش ذکر شده ذخیره می شود messages; هر پیام شامل سه قسمت است: id، user_id، و text. بقیه کد دو کار را انجام می دهد: تابعی ایجاد می کند که کد را برمی گرداند user مرتبط با پیام با استفاده از BelongsTo صفت، و تابعی را تعریف می کند که فیلد را قالب بندی می کند created_at در قالب تاریخ و زمان قابل خواندن برای انسان. در بالای هر پیام در کادر چت استفاده خواهد شد.

مدلی که ما نوشتیم به Eloquent (ORM لاراول) نحوه تعامل با داده های پایگاه داده خود را آموزش می دهد، مرحله بعدی ایجاد جدول در پایگاه داده است. برای انجام این کار ما به یک مهاجرت نیاز داریم، یعنی قطعه ای از کد که جدول را ایجاد می کند:

> php artisan make:migration create_message_table

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این کار یک فایل مهاجرت خالی ایجاد می شود database\migrations\ که نامش چیزی شبیه به _create_message_table.php. فایل شامل دو روش کلیدی است: up و down. این up متد تغییراتی را در طرح پایگاه داده شما ایجاد می کند، مانند ایجاد جداول جدید، اضافه کردن ستون ها یا ایجاد نمایه ها.

برعکس، down نقش متد خنثی کردن یا معکوس کردن تغییرات ایجاد شده توسط مربوطه است up روش، به طور موثر به شما امکان می دهد در صورت نیاز تغییرات را به عقب برگردانید. ما این فایل را با کد زیر تخصصی می کنیم:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
public function up(): void {
Schema::create(‘messages’, function (Blueprint $table) {
$table->id();
$table->timestamps();

$table->foreignId(‘user_id’)->constrained();
$table->text(‘text’)->nullable();
});
}

public function down(): void {
Schema::dropIfExists(‘messages’);
}
};

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این انتقال یک جدول پیام های جدید را با چند فیلد تعریف می کند: شناسه افزایش خودکار به عنوان کلید اصلی، user_id که به جدول کاربران برای پیوند دادن پیام ها با فرستنده آنها و یک فیلد متنی برای ذخیره محتوای پیام ارجاع می دهد.

این جدول همچنین دارای ستون‌های مهر زمانی است تا زمان ایجاد و تغییر خودکار هر پیام را ردیابی کند. مهرهای زمانی این دو فیلد را ایجاد خواهند کرد created_at و updated_at. به عنوان یک اقدام احتیاطی، این عملیات شامل یک روش معکوس است که می‌تواند در صورت نیاز جدول پیام‌ها را حذف کند و امکان بازگشت آسان این تغییرات را فراهم کند.

در این مرحله، بیایید موارد زیر را اجرا کنیم:

> php artisan migrate:fresh

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این کار یک جدول جدید در پایگاه داده ایجاد می شود. اگر می خواهید بررسی کنید که موفقیت آمیز بوده است، به سادگی آن را باز کنید database\database.sqlite فایل

افزودن ثبت نام و ورود کاربر

اکنون که فضایی برای داده‌ها داریم، نوبت به ایجاد فرانت‌اند رسیده است. هنگام توسعه رابط کاربری برای یک برنامه لاراول، شما دو گزینه اصلی دارید: اولی شامل استفاده از PHP برای ساخت ظاهر خود است. در مقابل، دومی از چارچوب های جاوا اسکریپت مانند Vue یا React استفاده می کند.

ما در این مقاله از Vue استفاده خواهیم کرد. این همچنین به توسعه دهندگان امکان می دهد از اکوسیستم بسته های عظیم و ابزارهای موجود از طریق npm استفاده کنند. ابتدا باید بسته مناسب را نصب کنیم:

> composer require laravel/ui

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک بار laravel/ui بسته نصب شده است، می توانید داربست جلویی را با استفاده از آن نصب کنید artisan دستور: دستور زیر رابط کاربری را برای مدیریت ثبت نام و ورود به برنامه وب ما ایجاد می کند. فقط در نظر بگیرید که این کار چقدر می تواند پیچیده باشد اگر باید این را از ابتدا بنویسید و چقدر آسان است که در لاراول انجام می شود:

> php artisan ui vue –auth

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مرحله، ما دو نیمه پروژه را داریم: PHP در حال حاضر با دستور PHP artisan serve در حال اجرا است. اکنون زمان اجرای بخش مبتنی بر جاوا اسکریپت است:

> npm install

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای اینکه هر دو قسمت در حال اجرا باشند، دو پنجره پوسته را باز کنید. یکی در حال اجرا artisan دستور و دیگری با دستور زیر:

> npm run dev

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این دستور جلوی صفحه را در حال اجرا نگه می‌دارد و هر بار که آن را تغییر می‌دهیم دوباره آن را بارگیری می‌کند.

در پایان این فرآیند، بدون نوشتن یک خط کد، یک وب سایت کاملاً کاربردی با امکان مدیریت احراز هویت کاربر داریم. برای ثبت نام کاربر جدید به http://127.0.0.1:8000/register بروید و وارد وبسایت شوید:

پیکربندی مسیرها برای API پیام چت

اکنون، باید مسیرهایی را برای API های مختلفی که قرار است میزبانی کنیم اضافه کنیم:

/home برای صفحه اصلی – این باید از قبل وجود داشته باشد
/message، یک روش POST HTTP برای افزودن یک پیام جدید
/messages برای دریافت تمام پیام های موجود

را اصلاح خواهیم کرد /routes/web.php به شرح زیر

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HomeController;

Route::get(“https://dev.to/”, function () { return view(‘welcome’); });

Auth::routes();

Route::get(‘/home’, [HomeController::class, ‘index’])
->name(‘home’);
Route::get(‘/messages’, [HomeController::class, ‘messages’])
->name(‘messages’);
Route::post(‘/message’, [HomeController::class, ‘message’])
->name(‘message’);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون زمان نوشتن است HomeController که API هایی را که در بالا توضیح دادیم پیاده سازی می کند:

namespace App\Http\Controllers;

use App\Jobs\SendMessage;
use App\Models\Message;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class HomeController extends Controller
{
public function __construct()
{
$this->middleware(‘auth’);
}

public function index()
{
$user = User::where(‘id’, auth()->id())->select([
‘id’,
‘name’,
’email’,
])->first();

return view(‘home’, [
‘user’ => $user,
]);
}

public function messages(): JsonResponse
{
$messages = Message::with(‘user’)->get()->append(‘time’);

return response()->json($messages);
}

public function message(Request $request): JsonResponse
{
$message = Message::create([
‘user_id’ => auth()->id(),
‘text’ => $request->get(‘text’),
]);
SendMessage::dispatch($message);

return response()->json([
‘success’ => true,
‘message’ => “Message created and job dispatched.”,
]);
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا می توانید منطق پشت APIهایی که در بالا توضیح داده شد را مشاهده کنید:

در /home روش، ما اطلاعات کاربر وارد شده را از پایگاه داده با استفاده از بازیابی می کنیم User مدل کنید و آن را به نمایش منتقل کنید
در /messages روش، ما همه پیام ها را از پایگاه داده از طریق واکشی می کنیم Message مدل، شامل داده های کاربر مرتبط، اضافه کردن time فیلد (با استفاده از یک Accessor) برای هر کدام messageو مجموعه کامل را به view ارسال کنید
در /message روش، ما یک روش جدید ایجاد خواهیم کرد message در پایگاه داده با استفاده از Message مدل و ارسال کنید SendMessage کار صف

وقتی همه چیز تنظیم شد، می‌توانیم رویدادهای لاراول و کارهای صف را برای میزبانی تبادل و همگام‌سازی پیام‌ها نصب و پیکربندی کنیم.

پیکربندی رویداد لاراول و کار صف

سیستم‌های شغلی رویداد و صف لاراول ابزارهای قدرتمندی را برای انجام وظایف ناهمزمان و جداسازی بخش‌های مختلف یک برنامه ارائه می‌کنند.

رویدادها به شما این امکان را می دهند که اعمال یا تغییرات خاصی را در برنامه خود تعریف و پخش کنید، که شنوندگان می توانند سپس به آنها پاسخ دهند. مشاغل صف به شما امکان می‌دهند کارهای زمان‌بر، مانند ارسال ایمیل یا پردازش مجموعه‌های داده بزرگ، را برای کارمندان پس‌زمینه بارگذاری کنید، و اطمینان حاصل کنید که برنامه شما پاسخگو و کارآمد باقی می‌ماند.

این ویژگی‌ها با هم، مقیاس‌پذیری را افزایش می‌دهند و تجربه کلی کاربر را با مدیریت فرآیندها در پس‌زمینه بهبود می‌بخشند. ما از هر دو استفاده خواهیم کرد: event اساسا یک محفظه داده است که پیام را نگه می دارد و QueueListener تعداد پیام هایی که منتظر ارسال هستند را کنترل می کند.

با دستور زیر، ما را تولید می کنیم Event کلاس در /app/Events دایرکتوری:

> php artisan make:event GotMessage

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس ما باید دو چیز را پیاده سازی کنیم: سازنده ای که توصیف می کند بار این رویداد چیست و broadcastOn() روشی برای تعیین اینکه این رویدادها در کدام کانال پخش شوند:

namespace App\Events;

use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class GotMessage implements ShouldBroadcast {
use Dispatchable, InteractsWithSockets, SerializesModels;

public function __construct() {
}

public function broadcastOn() {
return new PrivateChannel(“channel_for_everyone”);
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نام کانال (“channel_for_everyone”) در فایلی که WebSocket را توصیف می کند (به زیر مراجعه کنید) استفاده می شود که کانال ارتباطی بین هر نمونه از کلاینت چت و سرور را نشان می دهد. در اینجا توجه داشته باشید که سازنده هیچ پارامتری را نمی گیرد و هیچ اشاره ای به پیام ها ندارد: ایده این است که این رویداد زمانی پخش می شود که یک پیام جدید ارسال شود، هنگامی که مشتری آن را دریافت کرد، آنها فقط لیست به روز شده پیام ها را با استفاده از خدماتی که قبلا پیاده سازی کرده بودیم به سرور درخواست می کنند.

برای تولید QueueListener، از موارد زیر استفاده می کنیم:

> php artisan make:job SendMessage

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این دستور تولید می کند SendMessage.php فایل در /app/Jobs دایرکتوری این فایل به چارچوب لاراول آموزش می دهد که چگونه نمونه های جدید ایجاد شده را مدیریت کند GotMessage رویدادی که قبلا تعریف کردیم:

namespace App\Jobs;

use App\Events\GotMessage;
use App\Models\Message;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class SendMessage implements ShouldQueue {
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

public function __construct(public Message $message) {
//
}

public function handle(): void {
GotMessage::dispatch([
‘id’ => $this->message->id,
‘user_id’ => $this->message->user_id,
‘text’ => $this->message->text,
‘time’ => $this->message->time,
]);
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این handle() روش ارسال می کند GotMessage رویداد با جزئیاتی مانند پیام id، user_id، text، و timestamp. این کار به گونه‌ای طراحی شده است که در پس‌زمینه، رویدادها را تا زمانی که در کانال قرار می‌گیرند به‌صورت ناهمزمان پردازش کند، و امکان مدیریت کارآمد وظایف ارسال پیام در پس‌زمینه را فراهم می‌کند. همانطور که می بینید، عمومی وجود دارد $message ویژگی به عنوان آرگومان سازنده؛ این به اجرای کارآمدتر فرآیند صف کمک می کند (برای جزئیات بیشتر به مستندات مراجعه کنید).

با وجود تمام اجزای دیگر، اکنون فقط باید عنصر PHP نهایی را برای پروژه اضافه کنیم: WebSocket.

اضافه کردن Laravel Reverb

Laravel Reverb یک فریم ورک بلادرنگ WebSocket را ارائه می‌کند که به شما امکان می‌دهد رویدادها را از برنامه لاراول خود با استفاده از WebSockets به فرانت‌اند ارسال کنید. با Reverb، امکان پخش رویدادهایی که در بالا تعریف کردیم، در هر کلاینت متصل منعکس شده است، بدون نیاز به بارگذاری مجدد صفحه. طبق معمول، افزودن این ویژگی بسیار پیچیده با یک دستور ساده انجام می شود:

> php artisan install:broadcasting

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با پذیرفتن گزینه پیش فرض، هم قسمت PHP برای backend و هم وابستگی Node را برای استفاده در frontend نصب می کند.

اجرای این دستور چندین تغییر در دایرکتوری پروژه شما ایجاد می کند: یک بخش جدید به آن اضافه می کند .env فایل برای Reverb، ایجاد یک reverb.php فایل در /config برای خواندن این فیلدهای جدید، و مهمتر از همه، اضافه کردن یک channels.php فایل در /routes. در این channels.php Reverb را برای ایجاد آن پیکربندی می کنیم channel_for_everyone کانال را با اضافه کردن کد زیر:

Broadcast::channel(‘channel_for_everyone’, function ($user) {
return true;
});

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مرحله، همه چیز در قسمت پشتیبان سر جای خود است. اکنون می‌توانیم روی قسمت جلویی تمرکز کنیم.

ساخت جلویی Vue

در این بخش، یک ظاهر ساده با تمرکز بر عملکرد و یکپارچگی، بدون استایل، سفارشی سازی فونت و غیره طراحی می کنیم.

اولین قدم تنظیم محیط Vue است:

> npm install vue vue-router @vitejs/plugin-vue“`
{% endraw %}

Now we can focus on three files to integrate a Vue template in Laravel. The first one is {% raw %}`resources/js/app.js`{% endraw %}, which will instantiate the Vue component that contains our app:
{% raw %}

“`javascript
import ‘./bootstrap’;
import App from ‘./App.vue’
import { createApp } from ‘vue’;

const app = createApp({});

app.component(‘app’, App);

app.mount(“#app”);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد ساده است: App.vue الگوی Vue ما است و ما فقط آن را با div که id است #app در blade فایل (به قطعه کد بعدی مراجعه کنید) که برنامه وب ما را رندر می کند. فایل بعدی است resources/js/App.vue، که شامل قالب است:

<script setup>
const props = defineProps({
isAuth: {
type: Boolean,
default: false
},
user: {
type: [Object, Array],
required: false
}
})
</script>
<template>
<h1>Hello, {{ user.name }}</h1>
</template>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد دو کار را انجام می دهد: آن را تعریف می کند props برای Vue برای میزبانی مقادیری که از لاراول می آیند، و سپس یک پیام ساده نمایش می دهد. همانطور که می بینید، ما به تازگی احراز هویت فعلی را دریافت کردیم user و آنها را نشان دهند name.

آخرین فایل این است blade که مؤلفه Vue و داده‌هایی را که می‌خواهیم به آن تغذیه کنیم، به هم می‌چسباند. بیایید فقط کد زیر را در قسمت کپی کنیم resources\views\welcome.blade.php فایل:

Laravel + Vue Chat
@vite([‘resources/js/app.js’])

نوشته شده توسط روزاریو دی کیارا✏️

Laravel Reverb یک چارچوب وب سوکت بلادرنگ است که رویدادها را از لاراول به فرانت‌اند پخش می‌کند. این امکان همگام سازی بلادرنگ داده ها را در بین مشتریان متصل بدون بارگیری مجدد صفحه فراهم می کند. Vue یک چارچوب جاوا اسکریپت است که اجازه می دهد تا یک تجربه ظاهری واکنشی و مبتنی بر مؤلفه داشته باشید.

در این راهنما، ساختن یک برنامه چت کاملاً کاربردی و بلادرنگ را با استفاده از باطن Laravel Reverb و Frontend واکنشی Vue بررسی خواهیم کرد. طبق معمول، کد نهایی و عملکردی در این مخزن GitHub موجود است.

راه اندازی پیش نیازهای Laravel و Vue

قبل از شروع توسعه، باید محیطی متشکل از دو مؤلفه راه اندازی کنید: لاراول که مبتنی بر PHP است و مؤلفه Vue/Node.

  • PHP: نسخه 8.2 یا بالاتر (اجرا شود php -v برای بررسی نسخه)
  • آهنگساز (اجرا composer برای بررسی وجود آن)
  • Node.js: نسخه 20 یا بالاتر (اجرا شود node -v برای بررسی نسخه)

در تصویر زیر می توانید خروجی دستور بالا را در دستگاه ویندوز من مشاهده کنید:

خروجی فرمان در ماشین ویندوز

برای پایگاه داده، ما از SQLite استفاده خواهیم کرد، پس حتما آن را در خود فعال کنید php.ini فایل هنگامی که تمام پیش نیازهای اساسی را برآورده کردید، می توانید با استفاده از موارد زیر یک پروژه لاراول ایجاد کنید:

> composer create-project laravel/laravel:^11.0 laravel_chat_demo
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از آماده سازی ریشه پروژه خود برای شروع توسعه، ممکن است نیاز به نصب برخی الزامات بیشتری داشته باشید. این فرآیند به محیط خاص شما بستگی دارد، اما، به طور کلی، سعی کنید خود را بسازید composer دستور happy (🙂)، اگر شکایت کرد (یا فقط به شما هشدار داد) که بسته ای از دست رفته است، آن بسته را نصب کنید (Google دوست شماست).

وقتی همه چیز درست شد، باید بتوانید موارد زیر را اجرا کنید:

 > php artisan serve
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این محیط توسعه شما را روشن می کند.

ساخت مدل داده برای پیام های چت

اکنون که محیط توسعه (امیدوارم) خوب است، می‌توانیم روی بخش محرک توسعه تمرکز کنیم.

ما در حال نوشتن یک برنامه وب چت هستیم تا بتوانیم انتظار مدیریت پیام ها را داشته باشیم. با دستور زیر یک کلاس کاملاً جدید در قسمت دریافت می کنیم /app/Models که نشان دهنده پیام های رد و بدل شده در چت ما خواهد بود:

 > php artisan make:model -m Message
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در حال حاضر کلاس خالی است. ما آن را با داده ها و عملکردها تخصصی خواهیم کرد، بنابراین فایل را جایگزین کنید Message.php با کد زیر:



namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Message extends Model
{
    use HasFactory;

    public $table = 'messages';
    protected $fillable = ['id', 'user_id', 'text'];

    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class, 'user_id');
    }

    public function getTimeAttribute(): string
    {
        return date(
            "d M Y, H:i:s",
            strtotime($this->attributes['created_at'])
        );
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد بالا پیامی را در سیستم ما توصیف می کند: پیام ها در جدولی که نامش ذکر شده ذخیره می شود messages; هر پیام شامل سه قسمت است: id، user_id، و text. بقیه کد دو کار را انجام می دهد: تابعی ایجاد می کند که کد را برمی گرداند user مرتبط با پیام با استفاده از BelongsTo صفت، و تابعی را تعریف می کند که فیلد را قالب بندی می کند created_at در قالب تاریخ و زمان قابل خواندن برای انسان. در بالای هر پیام در کادر چت استفاده خواهد شد.

مدلی که ما نوشتیم به Eloquent (ORM لاراول) نحوه تعامل با داده های پایگاه داده خود را آموزش می دهد، مرحله بعدی ایجاد جدول در پایگاه داده است. برای انجام این کار ما به یک مهاجرت نیاز داریم، یعنی قطعه ای از کد که جدول را ایجاد می کند:

 > php artisan make:migration create_message_table
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این کار یک فایل مهاجرت خالی ایجاد می شود database\migrations\ که نامش چیزی شبیه به _create_message_table.php. فایل شامل دو روش کلیدی است: up و down. این up متد تغییراتی را در طرح پایگاه داده شما ایجاد می کند، مانند ایجاد جداول جدید، اضافه کردن ستون ها یا ایجاد نمایه ها.

برعکس، down نقش متد خنثی کردن یا معکوس کردن تغییرات ایجاد شده توسط مربوطه است up روش، به طور موثر به شما امکان می دهد در صورت نیاز تغییرات را به عقب برگردانید. ما این فایل را با کد زیر تخصصی می کنیم:

 

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void {
        Schema::create('messages', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            $table->foreignId('user_id')->constrained();
            $table->text('text')->nullable();
        });
    }

    public function down(): void {
        Schema::dropIfExists('messages');
    }
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این انتقال یک جدول پیام های جدید را با چند فیلد تعریف می کند: شناسه افزایش خودکار به عنوان کلید اصلی، user_id که به جدول کاربران برای پیوند دادن پیام ها با فرستنده آنها و یک فیلد متنی برای ذخیره محتوای پیام ارجاع می دهد.

این جدول همچنین دارای ستون‌های مهر زمانی است تا زمان ایجاد و تغییر خودکار هر پیام را ردیابی کند. مهرهای زمانی این دو فیلد را ایجاد خواهند کرد created_at و updated_at. به عنوان یک اقدام احتیاطی، این عملیات شامل یک روش معکوس است که می‌تواند در صورت نیاز جدول پیام‌ها را حذف کند و امکان بازگشت آسان این تغییرات را فراهم کند.

در این مرحله، بیایید موارد زیر را اجرا کنیم:

 > php artisan migrate:fresh
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این کار یک جدول جدید در پایگاه داده ایجاد می شود. اگر می خواهید بررسی کنید که موفقیت آمیز بوده است، به سادگی آن را باز کنید database\database.sqlite فایل

افزودن ثبت نام و ورود کاربر

اکنون که فضایی برای داده‌ها داریم، نوبت به ایجاد فرانت‌اند رسیده است. هنگام توسعه رابط کاربری برای یک برنامه لاراول، شما دو گزینه اصلی دارید: اولی شامل استفاده از PHP برای ساخت ظاهر خود است. در مقابل، دومی از چارچوب های جاوا اسکریپت مانند Vue یا React استفاده می کند.

ما در این مقاله از Vue استفاده خواهیم کرد. این همچنین به توسعه دهندگان امکان می دهد از اکوسیستم بسته های عظیم و ابزارهای موجود از طریق npm استفاده کنند. ابتدا باید بسته مناسب را نصب کنیم:

 > composer require laravel/ui
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک بار laravel/ui بسته نصب شده است، می توانید داربست جلویی را با استفاده از آن نصب کنید artisan دستور: دستور زیر رابط کاربری را برای مدیریت ثبت نام و ورود به برنامه وب ما ایجاد می کند. فقط در نظر بگیرید که این کار چقدر می تواند پیچیده باشد اگر باید این را از ابتدا بنویسید و چقدر آسان است که در لاراول انجام می شود:

 > php artisan ui vue --auth
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مرحله، ما دو نیمه پروژه را داریم: PHP در حال حاضر با دستور PHP artisan serve در حال اجرا است. اکنون زمان اجرای بخش مبتنی بر جاوا اسکریپت است:

 > npm install
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای اینکه هر دو قسمت در حال اجرا باشند، دو پنجره پوسته را باز کنید. یکی در حال اجرا artisan دستور و دیگری با دستور زیر:

 > npm run dev
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این دستور جلوی صفحه را در حال اجرا نگه می‌دارد و هر بار که آن را تغییر می‌دهیم دوباره آن را بارگیری می‌کند.

در پایان این فرآیند، بدون نوشتن یک خط کد، یک وب سایت کاملاً کاربردی با امکان مدیریت احراز هویت کاربر داریم. برای ثبت نام کاربر جدید به http://127.0.0.1:8000/register بروید و وارد وبسایت شوید:

صفحه ورود کاربر

پیکربندی مسیرها برای API پیام چت

اکنون، باید مسیرهایی را برای API های مختلفی که قرار است میزبانی کنیم اضافه کنیم:

  • /home برای صفحه اصلی – این باید از قبل وجود داشته باشد
  • /message، یک روش POST HTTP برای افزودن یک پیام جدید
  • /messages برای دریافت تمام پیام های موجود

را اصلاح خواهیم کرد /routes/web.php به شرح زیر



use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HomeController;

Route::get("https://dev.to/", function () { return view('welcome'); });

Auth::routes();

Route::get('/home', [HomeController::class, 'index'])
    ->name('home');
Route::get('/messages', [HomeController::class, 'messages'])
    ->name('messages');
Route::post('/message', [HomeController::class, 'message'])
    ->name('message');
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون زمان نوشتن است HomeController که API هایی را که در بالا توضیح دادیم پیاده سازی می کند:



namespace App\Http\Controllers;

use App\Jobs\SendMessage;
use App\Models\Message;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function index()
    {
        $user = User::where('id', auth()->id())->select([
            'id',
            'name',
            'email',
        ])->first();

        return view('home', [
            'user' => $user,
        ]);
    }

    public function messages(): JsonResponse
    {
        $messages = Message::with('user')->get()->append('time');

        return response()->json($messages);
    }

    public function message(Request $request): JsonResponse
    {
        $message = Message::create([
            'user_id' => auth()->id(),
            'text' => $request->get('text'),
        ]);
        SendMessage::dispatch($message);

        return response()->json([
            'success' => true,
            'message' => "Message created and job dispatched.",
        ]);
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا می توانید منطق پشت APIهایی که در بالا توضیح داده شد را مشاهده کنید:

  • در /home روش، ما اطلاعات کاربر وارد شده را از پایگاه داده با استفاده از بازیابی می کنیم User مدل کنید و آن را به نمایش منتقل کنید
  • در /messages روش، ما همه پیام ها را از پایگاه داده از طریق واکشی می کنیم Message مدل، شامل داده های کاربر مرتبط، اضافه کردن time فیلد (با استفاده از یک Accessor) برای هر کدام messageو مجموعه کامل را به view ارسال کنید
  • در /message روش، ما یک روش جدید ایجاد خواهیم کرد message در پایگاه داده با استفاده از Message مدل و ارسال کنید SendMessage کار صف

وقتی همه چیز تنظیم شد، می‌توانیم رویدادهای لاراول و کارهای صف را برای میزبانی تبادل و همگام‌سازی پیام‌ها نصب و پیکربندی کنیم.

پیکربندی رویداد لاراول و کار صف

سیستم‌های شغلی رویداد و صف لاراول ابزارهای قدرتمندی را برای انجام وظایف ناهمزمان و جداسازی بخش‌های مختلف یک برنامه ارائه می‌کنند.

رویدادها به شما این امکان را می دهند که اعمال یا تغییرات خاصی را در برنامه خود تعریف و پخش کنید، که شنوندگان می توانند سپس به آنها پاسخ دهند. مشاغل صف به شما امکان می‌دهند کارهای زمان‌بر، مانند ارسال ایمیل یا پردازش مجموعه‌های داده بزرگ، را برای کارمندان پس‌زمینه بارگذاری کنید، و اطمینان حاصل کنید که برنامه شما پاسخگو و کارآمد باقی می‌ماند.

این ویژگی‌ها با هم، مقیاس‌پذیری را افزایش می‌دهند و تجربه کلی کاربر را با مدیریت فرآیندها در پس‌زمینه بهبود می‌بخشند. ما از هر دو استفاده خواهیم کرد: event اساسا یک محفظه داده است که پیام را نگه می دارد و QueueListener تعداد پیام هایی که منتظر ارسال هستند را کنترل می کند.

با دستور زیر، ما را تولید می کنیم Event کلاس در /app/Events دایرکتوری:

 > php artisan make:event GotMessage
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس ما باید دو چیز را پیاده سازی کنیم: سازنده ای که توصیف می کند بار این رویداد چیست و broadcastOn() روشی برای تعیین اینکه این رویدادها در کدام کانال پخش شوند:



namespace App\Events;

use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class GotMessage implements ShouldBroadcast {
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public function __construct() {
    }

    public function broadcastOn() {
        return  new PrivateChannel("channel_for_everyone");
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نام کانال (“channel_for_everyone“) در فایلی که WebSocket را توصیف می کند (به زیر مراجعه کنید) استفاده می شود که کانال ارتباطی بین هر نمونه از کلاینت چت و سرور را نشان می دهد. در اینجا توجه داشته باشید که سازنده هیچ پارامتری را نمی گیرد و هیچ اشاره ای به پیام ها ندارد: ایده این است که این رویداد زمانی پخش می شود که یک پیام جدید ارسال شود، هنگامی که مشتری آن را دریافت کرد، آنها فقط لیست به روز شده پیام ها را با استفاده از خدماتی که قبلا پیاده سازی کرده بودیم به سرور درخواست می کنند.

برای تولید QueueListener، از موارد زیر استفاده می کنیم:

 > php artisan make:job SendMessage
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این دستور تولید می کند SendMessage.php فایل در /app/Jobs دایرکتوری این فایل به چارچوب لاراول آموزش می دهد که چگونه نمونه های جدید ایجاد شده را مدیریت کند GotMessage رویدادی که قبلا تعریف کردیم:



namespace App\Jobs;

use App\Events\GotMessage;
use App\Models\Message;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class SendMessage implements ShouldQueue {
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(public Message $message) {
        //
    }

    public function handle(): void {
        GotMessage::dispatch([
            'id' => $this->message->id,
            'user_id' => $this->message->user_id,
            'text' => $this->message->text,
            'time' => $this->message->time,
        ]);
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این handle() روش ارسال می کند GotMessage رویداد با جزئیاتی مانند پیام id، user_id، text، و timestamp. این کار به گونه‌ای طراحی شده است که در پس‌زمینه، رویدادها را تا زمانی که در کانال قرار می‌گیرند به‌صورت ناهمزمان پردازش کند، و امکان مدیریت کارآمد وظایف ارسال پیام در پس‌زمینه را فراهم می‌کند. همانطور که می بینید، عمومی وجود دارد $message ویژگی به عنوان آرگومان سازنده؛ این به اجرای کارآمدتر فرآیند صف کمک می کند (برای جزئیات بیشتر به مستندات مراجعه کنید).

با وجود تمام اجزای دیگر، اکنون فقط باید عنصر PHP نهایی را برای پروژه اضافه کنیم: WebSocket.

اضافه کردن Laravel Reverb

Laravel Reverb یک فریم ورک بلادرنگ WebSocket را ارائه می‌کند که به شما امکان می‌دهد رویدادها را از برنامه لاراول خود با استفاده از WebSockets به فرانت‌اند ارسال کنید. با Reverb، امکان پخش رویدادهایی که در بالا تعریف کردیم، در هر کلاینت متصل منعکس شده است، بدون نیاز به بارگذاری مجدد صفحه. طبق معمول، افزودن این ویژگی بسیار پیچیده با یک دستور ساده انجام می شود:

 > php artisan install:broadcasting
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با پذیرفتن گزینه پیش فرض، هم قسمت PHP برای backend و هم وابستگی Node را برای استفاده در frontend نصب می کند.

اجرای این دستور چندین تغییر در دایرکتوری پروژه شما ایجاد می کند: یک بخش جدید به آن اضافه می کند .env فایل برای Reverb، ایجاد یک reverb.php فایل در /config برای خواندن این فیلدهای جدید، و مهمتر از همه، اضافه کردن یک channels.php فایل در /routes. در این channels.php Reverb را برای ایجاد آن پیکربندی می کنیم channel_for_everyone کانال را با اضافه کردن کد زیر:

Broadcast::channel('channel_for_everyone', function ($user) {
    return true;
});
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مرحله، همه چیز در قسمت پشتیبان سر جای خود است. اکنون می‌توانیم روی قسمت جلویی تمرکز کنیم.

ساخت جلویی Vue

در این بخش، یک ظاهر ساده با تمرکز بر عملکرد و یکپارچگی، بدون استایل، سفارشی سازی فونت و غیره طراحی می کنیم.

اولین قدم تنظیم محیط Vue است:

> npm install vue vue-router @vitejs/plugin-vue```
{% endraw %}


Now we can focus on three files to integrate a Vue template in Laravel. The first one is {% raw %}`resources/js/app.js`{% endraw %}, which will instantiate the Vue component that contains our app:
{% raw %}


```javascript 
import './bootstrap';
import App from './App.vue'
import { createApp } from 'vue';

const app = createApp({});

app.component('app', App);

app.mount("#app");
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد ساده است: App.vue الگوی Vue ما است و ما فقط آن را با div که id است #app در blade فایل (به قطعه کد بعدی مراجعه کنید) که برنامه وب ما را رندر می کند. فایل بعدی است resources/js/App.vue، که شامل قالب است:

<script setup>
const props = defineProps({
    isAuth: {
        type: Boolean,
        default: false
    },
    user: {
        type: [Object, Array],
        required: false
    }
})
</script>
<template>
    <h1>Hello, {{ user.name }}</h1>
</template>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد دو کار را انجام می دهد: آن را تعریف می کند props برای Vue برای میزبانی مقادیری که از لاراول می آیند، و سپس یک پیام ساده نمایش می دهد. همانطور که می بینید، ما به تازگی احراز هویت فعلی را دریافت کردیم user و آنها را نشان دهند name.

آخرین فایل این است blade که مؤلفه Vue و داده‌هایی را که می‌خواهیم به آن تغذیه کنیم، به هم می‌چسباند. بیایید فقط کد زیر را در قسمت کپی کنیم resources\views\welcome.blade.php فایل:



 
 </span>Laravel + Vue Chat<span class="nt"/>
 @vite(['resources/js/app.js'])
<span class="nt"/>

<span class="nt"/>
 <span class="nt"/>
<span class="nt"/>

<span class="nt"/></code></pre>
</div>
</div>

			
		</div><!-- .entry-content /-->

				<div id="post-extra-info">
			<div class="theiaStickySidebar">
				<div class="single-post-meta post-meta clearfix"><span class="author-meta single-author with-avatars"><span class="meta-item meta-author-wrapper meta-author-2">
						<span class="meta-author-avatar">
							<a href="https://nabfollower.com/blog/author/ek3nk4r/"><img alt='تصویر ek3nk4r' src='https://secure.gravatar.com/avatar/1491a1837afc941cd5334f4a38a3aede5bf19483d37c0b6dd0447c5f952570b4?s=140&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/1491a1837afc941cd5334f4a38a3aede5bf19483d37c0b6dd0447c5f952570b4?s=280&d=mm&r=g 2x' class='avatar avatar-140 photo' height='140' width='140' decoding='async'/></a>
						</span>
					<span class="meta-author"><a href="https://nabfollower.com/blog/author/ek3nk4r/" class="author-name tie-icon" title="ek3nk4r">ek3nk4r</a></span>
						<a href="mailto:rambomordo@gmail.com" class="author-email-link" target="_blank" rel="nofollow noopener" title="ارسال ایمیل">
							<span class="tie-icon-envelope" aria-hidden="true"></span>
							<span class="screen-reader-text">ارسال ایمیل</span>
						</a>
					</span></span><span class="date meta-item tie-icon">2024-11-12</span><div class="tie-alignright"><span class="meta-comment tie-icon meta-item fa-before">0</span><span class="meta-views meta-item "><span class="tie-icon-fire" aria-hidden="true"></span> 0 </span><span class="meta-reading-time meta-item"><span class="tie-icon-bookmark" aria-hidden="true"></span> خواندن این مطلب 22 دقیقه زمان میبرد</span> </div></div><!-- .post-meta -->

		<div id="share-buttons-top" class="share-buttons share-buttons-top">
			<div class="share-links  icons-only">
				
				<a href="https://www.facebook.com/sharer.php?u=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="فیس بوک" target="_blank" class="facebook-share-btn " data-raw="https://www.facebook.com/sharer.php?u={post_link}">
					<span class="share-btn-icon tie-icon-facebook"></span> <span class="screen-reader-text">فیس بوک</span>
				</a>
				<a href="https://twitter.com/intent/tweet?text=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue&url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="توییتر (X)" target="_blank" class="twitter-share-btn " data-raw="https://twitter.com/intent/tweet?text={post_title}&url={post_link}">
					<span class="share-btn-icon tie-icon-twitter"></span> <span class="screen-reader-text">توییتر (X)</span>
				</a>
				<a href="https://www.linkedin.com/shareArticle?mini=true&url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&title=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue" rel="external noopener nofollow" title="لینکدین" target="_blank" class="linkedin-share-btn " data-raw="https://www.linkedin.com/shareArticle?mini=true&url={post_full_link}&title={post_title}">
					<span class="share-btn-icon tie-icon-linkedin"></span> <span class="screen-reader-text">لینکدین</span>
				</a>
				<a href="https://www.tumblr.com/share/link?url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&name=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue" rel="external noopener nofollow" title="‫تامبلر" target="_blank" class="tumblr-share-btn " data-raw="https://www.tumblr.com/share/link?url={post_link}&name={post_title}">
					<span class="share-btn-icon tie-icon-tumblr"></span> <span class="screen-reader-text">‫تامبلر</span>
				</a>
				<a href="https://pinterest.com/pin/create/button/?url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&description=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue&media=https://nabfollower.com/blog/wp-content/uploads/2024/11/ساخت-یک-برنامه-چت-بلادرنگ-با-استفاده-از-Laravel-Reverb.png" rel="external noopener nofollow" title="‫پین‌ترست" target="_blank" class="pinterest-share-btn " data-raw="https://pinterest.com/pin/create/button/?url={post_link}&description={post_title}&media={post_img}">
					<span class="share-btn-icon tie-icon-pinterest"></span> <span class="screen-reader-text">‫پین‌ترست</span>
				</a>
				<a href="https://reddit.com/submit?url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&title=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue" rel="external noopener nofollow" title="‫رددیت" target="_blank" class="reddit-share-btn " data-raw="https://reddit.com/submit?url={post_link}&title={post_title}">
					<span class="share-btn-icon tie-icon-reddit"></span> <span class="screen-reader-text">‫رددیت</span>
				</a>
				<a href="https://vk.com/share.php?url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="‫VKontakte" target="_blank" class="vk-share-btn " data-raw="https://vk.com/share.php?url={post_link}">
					<span class="share-btn-icon tie-icon-vk"></span> <span class="screen-reader-text">‫VKontakte</span>
				</a>
				<a href="https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&st.shareUrl=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&description=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue&media=https://nabfollower.com/blog/wp-content/uploads/2024/11/ساخت-یک-برنامه-چت-بلادرنگ-با-استفاده-از-Laravel-Reverb.png" rel="external noopener nofollow" title="‫Odnoklassniki" target="_blank" class="odnoklassniki-share-btn " data-raw="https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&st.shareUrl={post_link}&description={post_title}&media={post_img}">
					<span class="share-btn-icon tie-icon-odnoklassniki"></span> <span class="screen-reader-text">‫Odnoklassniki</span>
				</a>
				<a href="https://getpocket.com/save?title=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue&url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="پاکت" target="_blank" class="pocket-share-btn " data-raw="https://getpocket.com/save?title={post_title}&url={post_link}">
					<span class="share-btn-icon tie-icon-get-pocket"></span> <span class="screen-reader-text">پاکت</span>
				</a>			</div><!-- .share-links /-->
		</div><!-- .share-buttons /-->

					</div>
		</div>

		<div class="clearfix"></div>
		<script id="tie-schema-json" type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"Article","dateCreated":"2024-11-12T19:20:39+03:30","datePublished":"2024-11-12T19:20:39+03:30","dateModified":"2024-11-12T19:20:39+03:30","headline":"\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u062a \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Laravel Reverb \u0648 Vue","name":"\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u062a \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Laravel Reverb \u0648 Vue","keywords":[],"url":"https:\/\/nabfollower.com\/blog\/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe\/","description":"Summarize this content to 400 words in Persian Lang \u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u0631\u0648\u0632\u0627\u0631\u06cc\u0648 \u062f\u06cc \u06a9\u06cc\u0627\u0631\u0627\u270f\ufe0f Laravel Reverb \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0648\u0628 \u0633\u0648\u06a9\u062a \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u0627\u0633\u062a \u06a9\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0631\u0627 \u0627\u0632 \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0647 \u0641\u0631\u0627\u0646\u062a\u200c\u0627\u0646\u062f \u067e\u062e\u0634 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0647\u0645\u06af\u0627\u0645 \u0633\u0627\u0632","copyrightYear":"2024","articleSection":"\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc","articleBody":"Summarize this content to 400 words in Persian Lang \n            \u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u0631\u0648\u0632\u0627\u0631\u06cc\u0648 \u062f\u06cc \u06a9\u06cc\u0627\u0631\u0627\u270f\ufe0f\n\nLaravel Reverb \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0648\u0628 \u0633\u0648\u06a9\u062a \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u0627\u0633\u062a \u06a9\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0631\u0627 \u0627\u0632 \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0647 \u0641\u0631\u0627\u0646\u062a\u200c\u0627\u0646\u062f \u067e\u062e\u0634 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0647\u0645\u06af\u0627\u0645 \u0633\u0627\u0632\u06cc \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u062f\u0631 \u0628\u06cc\u0646 \u0645\u0634\u062a\u0631\u06cc\u0627\u0646 \u0645\u062a\u0635\u0644 \u0628\u062f\u0648\u0646 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u062c\u062f\u062f \u0635\u0641\u062d\u0647 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. Vue \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a \u06a9\u0647 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u06cc\u06a9 \u062a\u062c\u0631\u0628\u0647 \u0638\u0627\u0647\u0631\u06cc \u0648\u0627\u06a9\u0646\u0634\u06cc \u0648 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0645\u0624\u0644\u0641\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f. \n\n\u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0648 \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0627\u0637\u0646 Laravel Reverb \u0648 Frontend \u0648\u0627\u06a9\u0646\u0634\u06cc Vue \u0628\u0631\u0631\u0633\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0637\u0628\u0642 \u0645\u0639\u0645\u0648\u0644\u060c \u06a9\u062f \u0646\u0647\u0627\u06cc\u06cc \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062e\u0632\u0646 GitHub \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a.\n\n\n  \n  \n  \n  \n  \n  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc Laravel \u0648 Vue\n\n\n\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u062a\u0648\u0633\u0639\u0647\u060c \u0628\u0627\u06cc\u062f \u0645\u062d\u06cc\u0637\u06cc \u0645\u062a\u0634\u06a9\u0644 \u0627\u0632 \u062f\u0648 \u0645\u0624\u0644\u0641\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f: \u0644\u0627\u0631\u0627\u0648\u0644 \u06a9\u0647 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 PHP \u0627\u0633\u062a \u0648 \u0645\u0624\u0644\u0641\u0647 Vue\/Node.\n\n\n    PHP: \u0646\u0633\u062e\u0647 8.2 \u06cc\u0627 \u0628\u0627\u0644\u0627\u062a\u0631 (\u0627\u062c\u0631\u0627 \u0634\u0648\u062f php -v \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0646\u0633\u062e\u0647)\n    \u0622\u0647\u0646\u06af\u0633\u0627\u0632 (\u0627\u062c\u0631\u0627 composer \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0648\u062c\u0648\u062f \u0622\u0646)\n    Node.js: \u0646\u0633\u062e\u0647 20 \u06cc\u0627 \u0628\u0627\u0644\u0627\u062a\u0631 (\u0627\u062c\u0631\u0627 \u0634\u0648\u062f node -v \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0646\u0633\u062e\u0647)\n\n\n\u062f\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0632\u06cc\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062e\u0631\u0648\u062c\u06cc \u062f\u0633\u062a\u0648\u0631 \u0628\u0627\u0644\u0627 \u0631\u0627 \u062f\u0631 \u062f\u0633\u062a\u06af\u0627\u0647 \u0648\u06cc\u0646\u062f\u0648\u0632 \u0645\u0646 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f:\n\n\n\n\u0628\u0631\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647\u060c \u0645\u0627 \u0627\u0632 SQLite \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f\u060c \u067e\u0633 \u062d\u062a\u0645\u0627 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u062e\u0648\u062f \u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u062f php.ini \u0641\u0627\u06cc\u0644 \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u062a\u0645\u0627\u0645 \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0627\u0633\u0627\u0633\u06cc \u0631\u0627 \u0628\u0631\u0622\u0648\u0631\u062f\u0647 \u06a9\u0631\u062f\u06cc\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0644\u0627\u0631\u0627\u0648\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:\n\n\n> composer create-project laravel\/laravel:^11.0 laravel_chat_demo\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u067e\u0633 \u0627\u0632 \u0622\u0645\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0631\u06cc\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u062a\u0648\u0633\u0639\u0647\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0646\u0635\u0628 \u0628\u0631\u062e\u06cc \u0627\u0644\u0632\u0627\u0645\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f. \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0628\u0647 \u0645\u062d\u06cc\u0637 \u062e\u0627\u0635 \u0634\u0645\u0627 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u062f\u060c \u0627\u0645\u0627\u060c \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc\u060c \u0633\u0639\u06cc \u06a9\u0646\u06cc\u062f \u062e\u0648\u062f \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f composer \u062f\u0633\u062a\u0648\u0631 happy (\ud83d\ude42)\u060c \u0627\u06af\u0631 \u0634\u06a9\u0627\u06cc\u062a \u06a9\u0631\u062f (\u06cc\u0627 \u0641\u0642\u0637 \u0628\u0647 \u0634\u0645\u0627 \u0647\u0634\u062f\u0627\u0631 \u062f\u0627\u062f) \u06a9\u0647 \u0628\u0633\u062a\u0647 \u0627\u06cc \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0647 \u0627\u0633\u062a\u060c \u0622\u0646 \u0628\u0633\u062a\u0647 \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f (Google \u062f\u0648\u0633\u062a \u0634\u0645\u0627\u0633\u062a). \n\n\u0648\u0642\u062a\u06cc \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062f\u0631\u0633\u062a \u0634\u062f\u060c \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:\n\n\n > php artisan serve\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06cc\u0646 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0633\u0639\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0631\u0648\u0634\u0646 \u0645\u06cc \u06a9\u0646\u062f.\n\n\n  \n  \n  \n  \n  \n  \u0633\u0627\u062e\u062a \u0645\u062f\u0644 \u062f\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0686\u062a\n\n\n\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0633\u0639\u0647 (\u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0645) \u062e\u0648\u0628 \u0627\u0633\u062a\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0631\u0648\u06cc \u0628\u062e\u0634 \u0645\u062d\u0631\u06a9 \u062a\u0648\u0633\u0639\u0647 \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u06cc\u0645. \n\n\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0646\u0648\u0634\u062a\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0686\u062a \u0647\u0633\u062a\u06cc\u0645 \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0646\u062a\u0638\u0627\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0631\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645. \u0628\u0627 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u06a9\u0627\u0645\u0644\u0627\u064b \u062c\u062f\u06cc\u062f \u062f\u0631 \u0642\u0633\u0645\u062a \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u06cc\u0645 \/app\/Models \u06a9\u0647 \u0646\u0634\u0627\u0646 \u062f\u0647\u0646\u062f\u0647 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0631\u062f \u0648 \u0628\u062f\u0644 \u0634\u062f\u0647 \u062f\u0631 \u0686\u062a \u0645\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:\n\n\n > php artisan make:model -m Message\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u06a9\u0644\u0627\u0633 \u062e\u0627\u0644\u06cc \u0627\u0633\u062a. \u0645\u0627 \u0622\u0646 \u0631\u0627 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627 \u062a\u062e\u0635\u0635\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0631\u0627 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u06cc\u062f Message.php \u0628\u0627 \u06a9\u062f \u0632\u06cc\u0631:\n\n\n\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\nclass Message extends Model\n{\n    use HasFactory;\n\n    public $table = 'messages';\n    protected $fillable = ['id', 'user_id', 'text'];\n\n    public function user(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'user_id');\n    }\n\n    public function getTimeAttribute(): string\n    {\n        return date(\n            \"d M Y, H:i:s\",\n            strtotime($this->attributes['created_at'])\n        );\n    }\n}\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u06a9\u062f \u0628\u0627\u0644\u0627 \u067e\u06cc\u0627\u0645\u06cc \u0631\u0627 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0627 \u062a\u0648\u0635\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f: \u067e\u06cc\u0627\u0645 \u0647\u0627 \u062f\u0631 \u062c\u062f\u0648\u0644\u06cc \u06a9\u0647 \u0646\u0627\u0645\u0634 \u0630\u06a9\u0631 \u0634\u062f\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u0634\u0648\u062f messages; \u0647\u0631 \u067e\u06cc\u0627\u0645 \u0634\u0627\u0645\u0644 \u0633\u0647 \u0642\u0633\u0645\u062a \u0627\u0633\u062a: id\u060c user_id\u060c \u0648 text. \u0628\u0642\u06cc\u0647 \u06a9\u062f \u062f\u0648 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f: \u062a\u0627\u0628\u0639\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u06a9\u062f \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f user \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 \u067e\u06cc\u0627\u0645 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 BelongsTo \u0635\u0641\u062a\u060c \u0648 \u062a\u0627\u0628\u0639\u06cc \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0641\u06cc\u0644\u062f \u0631\u0627 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0645\u06cc \u06a9\u0646\u062f created_at \u062f\u0631 \u0642\u0627\u0644\u0628 \u062a\u0627\u0631\u06cc\u062e \u0648 \u0632\u0645\u0627\u0646 \u0642\u0627\u0628\u0644 \u062e\u0648\u0627\u0646\u062f\u0646 \u0628\u0631\u0627\u06cc \u0627\u0646\u0633\u0627\u0646. \u062f\u0631 \u0628\u0627\u0644\u0627\u06cc \u0647\u0631 \u067e\u06cc\u0627\u0645 \u062f\u0631 \u06a9\u0627\u062f\u0631 \u0686\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u062f \u0634\u062f. \n\n\u0645\u062f\u0644\u06cc \u06a9\u0647 \u0645\u0627 \u0646\u0648\u0634\u062a\u06cc\u0645 \u0628\u0647 Eloquent (ORM \u0644\u0627\u0631\u0627\u0648\u0644) \u0646\u062d\u0648\u0647 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u0622\u0645\u0648\u0632\u0634 \u0645\u06cc \u062f\u0647\u062f\u060c \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u062c\u062f\u0648\u0644 \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u0627 \u0628\u0647 \u06cc\u06a9 \u0645\u0647\u0627\u062c\u0631\u062a \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645\u060c \u06cc\u0639\u0646\u06cc \u0642\u0637\u0639\u0647 \u0627\u06cc \u0627\u0632 \u06a9\u062f \u06a9\u0647 \u062c\u062f\u0648\u0644 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f:\n\n\n > php artisan make:migration create_message_table\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0645\u0647\u0627\u062c\u0631\u062a \u062e\u0627\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f database\\migrations\\ \u06a9\u0647 \u0646\u0627\u0645\u0634 \u0686\u06cc\u0632\u06cc \u0634\u0628\u06cc\u0647 \u0628\u0647 _create_message_table.php. \u0641\u0627\u06cc\u0644 \u0634\u0627\u0645\u0644 \u062f\u0648 \u0631\u0648\u0634 \u06a9\u0644\u06cc\u062f\u06cc \u0627\u0633\u062a: up \u0648 down. \u0627\u06cc\u0646 up \u0645\u062a\u062f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u06cc \u0631\u0627 \u062f\u0631 \u0637\u0631\u062d \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0634\u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u062c\u0627\u062f \u062c\u062f\u0627\u0648\u0644 \u062c\u062f\u06cc\u062f\u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u062a\u0648\u0646 \u0647\u0627 \u06cc\u0627 \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0627\u06cc\u0647 \u0647\u0627. \n\n\u0628\u0631\u0639\u06a9\u0633\u060c down \u0646\u0642\u0634 \u0645\u062a\u062f \u062e\u0646\u062b\u06cc \u06a9\u0631\u062f\u0646 \u06cc\u0627 \u0645\u0639\u06a9\u0648\u0633 \u06a9\u0631\u062f\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u0645\u0631\u0628\u0648\u0637\u0647 \u0627\u0633\u062a up \u0631\u0648\u0634\u060c \u0628\u0647 \u0637\u0648\u0631 \u0645\u0648\u062b\u0631 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u0628\u0647 \u0639\u0642\u0628 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f. \u0645\u0627 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0631\u0627 \u0628\u0627 \u06a9\u062f \u0632\u06cc\u0631 \u062a\u062e\u0635\u0635\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645:\n\n\n \n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration {\n    public function up(): void {\n        Schema::create('messages', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n\n            $table->foreignId('user_id')->constrained();\n            $table->text('text')->nullable();\n        });\n    }\n\n    public function down(): void {\n        Schema::dropIfExists('messages');\n    }\n};\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06cc\u0646 \u0627\u0646\u062a\u0642\u0627\u0644 \u06cc\u06a9 \u062c\u062f\u0648\u0644 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0631\u0627 \u0628\u0627 \u0686\u0646\u062f \u0641\u06cc\u0644\u062f \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f: \u0634\u0646\u0627\u0633\u0647 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06a9\u0644\u06cc\u062f \u0627\u0635\u0644\u06cc\u060c user_id \u06a9\u0647 \u0628\u0647 \u062c\u062f\u0648\u0644 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0648\u0646\u062f \u062f\u0627\u062f\u0646 \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0628\u0627 \u0641\u0631\u0633\u062a\u0646\u062f\u0647 \u0622\u0646\u0647\u0627 \u0648 \u06cc\u06a9 \u0641\u06cc\u0644\u062f \u0645\u062a\u0646\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc \u067e\u06cc\u0627\u0645 \u0627\u0631\u062c\u0627\u0639 \u0645\u06cc \u062f\u0647\u062f. \n\n\u0627\u06cc\u0646 \u062c\u062f\u0648\u0644 \u0647\u0645\u0686\u0646\u06cc\u0646 \u062f\u0627\u0631\u0627\u06cc \u0633\u062a\u0648\u0646\u200c\u0647\u0627\u06cc \u0645\u0647\u0631 \u0632\u0645\u0627\u0646\u06cc \u0627\u0633\u062a \u062a\u0627 \u0632\u0645\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0647\u0631 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u0631\u062f\u06cc\u0627\u0628\u06cc \u06a9\u0646\u062f. \u0645\u0647\u0631\u0647\u0627\u06cc \u0632\u0645\u0627\u0646\u06cc \u0627\u06cc\u0646 \u062f\u0648 \u0641\u06cc\u0644\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u0646\u062f \u06a9\u0631\u062f created_at \u0648 updated_at. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0627\u0642\u062f\u0627\u0645 \u0627\u062d\u062a\u06cc\u0627\u0637\u06cc\u060c \u0627\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0634\u0627\u0645\u0644 \u06cc\u06a9 \u0631\u0648\u0634 \u0645\u0639\u06a9\u0648\u0633 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u062c\u062f\u0648\u0644 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u062f \u0648 \u0627\u0645\u06a9\u0627\u0646 \u0628\u0627\u0632\u06af\u0634\u062a \u0622\u0633\u0627\u0646 \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u06a9\u0646\u062f. \n\n\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645:\n\n\n > php artisan migrate:fresh\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u06cc\u06a9 \u062c\u062f\u0648\u0644 \u062c\u062f\u06cc\u062f \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f. \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632 \u0628\u0648\u062f\u0647 \u0627\u0633\u062a\u060c \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f database\\database.sqlite \u0641\u0627\u06cc\u0644\n\n\n  \n  \n  \n  \n  \n  \u0627\u0641\u0632\u0648\u062f\u0646 \u062b\u0628\u062a \u0646\u0627\u0645 \u0648 \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631\n\n\n\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0641\u0636\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062f\u0627\u0631\u06cc\u0645\u060c \u0646\u0648\u0628\u062a \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0641\u0631\u0627\u0646\u062a\u200c\u0627\u0646\u062f \u0631\u0633\u06cc\u062f\u0647 \u0627\u0633\u062a. \u0647\u0646\u06af\u0627\u0645 \u062a\u0648\u0633\u0639\u0647 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0631\u0627\u0648\u0644\u060c \u0634\u0645\u0627 \u062f\u0648 \u06af\u0632\u06cc\u0646\u0647 \u0627\u0635\u0644\u06cc \u062f\u0627\u0631\u06cc\u062f: \u0627\u0648\u0644\u06cc \u0634\u0627\u0645\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 PHP \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0638\u0627\u0647\u0631 \u062e\u0648\u062f \u0627\u0633\u062a. \u062f\u0631 \u0645\u0642\u0627\u0628\u0644\u060c \u062f\u0648\u0645\u06cc \u0627\u0632 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0645\u0627\u0646\u0646\u062f Vue \u06cc\u0627 React \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \n\n\u0645\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0627\u0632 Vue \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0627\u06cc\u0646 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0627\u0632 \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 \u0628\u0633\u062a\u0647 \u0647\u0627\u06cc \u0639\u0638\u06cc\u0645 \u0648 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 npm \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646\u062f. \u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u0628\u0633\u062a\u0647 \u0645\u0646\u0627\u0633\u0628 \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u0645:\n\n\n > composer require laravel\/ui\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u06cc\u06a9 \u0628\u0627\u0631 laravel\/ui \u0628\u0633\u062a\u0647 \u0646\u0635\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0627\u0631\u0628\u0633\u062a \u062c\u0644\u0648\u06cc\u06cc \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f artisan \u062f\u0633\u062a\u0648\u0631: \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062b\u0628\u062a \u0646\u0627\u0645 \u0648 \u0648\u0631\u0648\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f. \u0641\u0642\u0637 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0686\u0642\u062f\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0627\u0634\u062f \u0627\u06af\u0631 \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u0631\u0627 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f \u0648 \u0686\u0642\u062f\u0631 \u0622\u0633\u0627\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f:\n\n\n > php artisan ui vue --auth\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0645\u0627 \u062f\u0648 \u0646\u06cc\u0645\u0647 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645: PHP \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0628\u0627 \u062f\u0633\u062a\u0648\u0631 PHP artisan serve \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0627\u0633\u062a. \u0627\u06a9\u0646\u0648\u0646 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc \u0628\u062e\u0634 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a:\n\n\n > npm install\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0631 \u062f\u0648 \u0642\u0633\u0645\u062a \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0628\u0627\u0634\u0646\u062f\u060c \u062f\u0648 \u067e\u0646\u062c\u0631\u0647 \u067e\u0648\u0633\u062a\u0647 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f. \u06cc\u06a9\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 artisan \u062f\u0633\u062a\u0648\u0631 \u0648 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0627 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631:\n\n\n > npm run dev\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u062c\u0644\u0648\u06cc \u0635\u0641\u062d\u0647 \u0631\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u062f \u0648 \u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645 \u062f\u0648\u0628\u0627\u0631\u0647 \u0622\u0646 \u0631\u0627 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f. \n\n\u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f\u060c \u0628\u062f\u0648\u0646 \u0646\u0648\u0634\u062a\u0646 \u06cc\u06a9 \u062e\u0637 \u06a9\u062f\u060c \u06cc\u06a9 \u0648\u0628 \u0633\u0627\u06cc\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0628\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u0631\u06cc\u0645. \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u06cc\u062f \u0628\u0647 http:\/\/127.0.0.1:8000\/register \u0628\u0631\u0648\u06cc\u062f \u0648 \u0648\u0627\u0631\u062f \u0648\u0628\u0633\u0627\u06cc\u062a \u0634\u0648\u06cc\u062f:\n\n\n\n\n  \n  \n  \n  \n  \n  \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u0633\u06cc\u0631\u0647\u0627 \u0628\u0631\u0627\u06cc API \u067e\u06cc\u0627\u0645 \u0686\u062a\n\n\n\u0627\u06a9\u0646\u0648\u0646\u060c \u0628\u0627\u06cc\u062f \u0645\u0633\u06cc\u0631\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc API \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u06a9\u0647 \u0642\u0631\u0627\u0631 \u0627\u0633\u062a \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0646\u06cc\u0645 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:\n\n\n  \/home  \u0628\u0631\u0627\u06cc \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc - \u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0642\u0628\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n  \/message\u060c \u06cc\u06a9 \u0631\u0648\u0634 POST HTTP \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062c\u062f\u06cc\u062f\n  \/messages  \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062a\u0645\u0627\u0645 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f\n\n\n\u0631\u0627 \u0627\u0635\u0644\u0627\u062d \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \/routes\/web.php \u0628\u0647 \u0634\u0631\u062d \u0632\u06cc\u0631\n\n\n\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Route;\nuse App\\Http\\Controllers\\HomeController;\n\nRoute::get(\"https:\/\/dev.to\/\", function () { return view('welcome'); });\n\nAuth::routes();\n\nRoute::get('\/home', [HomeController::class, 'index'])\n    ->name('home');\nRoute::get('\/messages', [HomeController::class, 'messages'])\n    ->name('messages');\nRoute::post('\/message', [HomeController::class, 'message'])\n    ->name('message');\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06a9\u0646\u0648\u0646 \u0632\u0645\u0627\u0646 \u0646\u0648\u0634\u062a\u0646 \u0627\u0633\u062a HomeController \u06a9\u0647 API \u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u06cc\u0645 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f:\n\n\n\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Jobs\\SendMessage;\nuse App\\Models\\Message;\nuse App\\Models\\User;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\n\nclass HomeController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index()\n    {\n        $user = User::where('id', auth()->id())->select([\n            'id',\n            'name',\n            'email',\n        ])->first();\n\n        return view('home', [\n            'user' => $user,\n        ]);\n    }\n\n    public function messages(): JsonResponse\n    {\n        $messages = Message::with('user')->get()->append('time');\n\n        return response()->json($messages);\n    }\n\n    public function message(Request $request): JsonResponse\n    {\n        $message = Message::create([\n            'user_id' => auth()->id(),\n            'text' => $request->get('text'),\n        ]);\n        SendMessage::dispatch($message);\n\n        return response()->json([\n            'success' => true,\n            'message' => \"Message created and job dispatched.\",\n        ]);\n    }\n}\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0646\u0637\u0642 \u067e\u0634\u062a API\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f:\n\n\n    \u062f\u0631 \/home \u0631\u0648\u0634\u060c \u0645\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f \u0634\u062f\u0647 \u0631\u0627 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645 User \u0645\u062f\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0646\u06cc\u062f\n    \u062f\u0631 \/messages \u0631\u0648\u0634\u060c \u0645\u0627 \u0647\u0645\u0647 \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0631\u0627 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0648\u0627\u06a9\u0634\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645 Message \u0645\u062f\u0644\u060c \u0634\u0627\u0645\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0645\u0631\u062a\u0628\u0637\u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 time \u0641\u06cc\u0644\u062f (\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 Accessor) \u0628\u0631\u0627\u06cc \u0647\u0631 \u06a9\u062f\u0627\u0645 message\u0648 \u0645\u062c\u0645\u0648\u0639\u0647 \u06a9\u0627\u0645\u0644 \u0631\u0627 \u0628\u0647 view \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f\n    \u062f\u0631 \/message \u0631\u0648\u0634\u060c \u0645\u0627 \u06cc\u06a9 \u0631\u0648\u0634 \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f message \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Message \u0645\u062f\u0644 \u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f SendMessage \u06a9\u0627\u0631 \u0635\u0641\n\n\n\u0648\u0642\u062a\u06cc \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062a\u0646\u0638\u06cc\u0645 \u0634\u062f\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0644\u0627\u0631\u0627\u0648\u0644 \u0648 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0635\u0641 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u062a\u0628\u0627\u062f\u0644 \u0648 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0646\u0635\u0628 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u0645.\n\n\n  \n  \n  \n  \n  \n  \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f \u0644\u0627\u0631\u0627\u0648\u0644 \u0648 \u06a9\u0627\u0631 \u0635\u0641\n\n\n\u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u0634\u063a\u0644\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 \u0635\u0641 \u0644\u0627\u0631\u0627\u0648\u0644 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0648\u0638\u0627\u06cc\u0641 \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0648 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f. \n\n\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u0646\u062f \u06a9\u0647 \u0627\u0639\u0645\u0627\u0644 \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062e\u0627\u0635\u06cc \u0631\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u062a\u0639\u0631\u06cc\u0641 \u0648 \u067e\u062e\u0634 \u06a9\u0646\u06cc\u062f\u060c \u06a9\u0647 \u0634\u0646\u0648\u0646\u062f\u06af\u0627\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0633\u067e\u0633 \u0628\u0647 \u0622\u0646\u0647\u0627 \u067e\u0627\u0633\u062e \u062f\u0647\u0646\u062f. \u0645\u0634\u0627\u063a\u0644 \u0635\u0641 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u06a9\u0627\u0631\u0647\u0627\u06cc \u0632\u0645\u0627\u0646\u200c\u0628\u0631\u060c \u0645\u0627\u0646\u0646\u062f \u0627\u0631\u0633\u0627\u0644 \u0627\u06cc\u0645\u06cc\u0644 \u06cc\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u062c\u0645\u0648\u0639\u0647\u200c\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0628\u0632\u0631\u06af\u060c \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0645\u0646\u062f\u0627\u0646 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u067e\u0627\u0633\u062e\u06af\u0648 \u0648 \u06a9\u0627\u0631\u0622\u0645\u062f \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0627\u0646\u062f. \n\n\u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627 \u0628\u0627 \u0647\u0645\u060c \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631\u06cc \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u0648 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0644\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0628\u0647\u0628\u0648\u062f \u0645\u06cc\u200c\u0628\u062e\u0634\u0646\u062f. \u0645\u0627 \u0627\u0632 \u0647\u0631 \u062f\u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f: event \u0627\u0633\u0627\u0633\u0627 \u06cc\u06a9 \u0645\u062d\u0641\u0638\u0647 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u0646\u06af\u0647 \u0645\u06cc \u062f\u0627\u0631\u062f \u0648 QueueListener \u062a\u0639\u062f\u0627\u062f \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0646\u062a\u0638\u0631 \u0627\u0631\u0633\u0627\u0644 \u0647\u0633\u062a\u0646\u062f \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u062f. \n\n\u0628\u0627 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631\u060c \u0645\u0627 \u0631\u0627 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 Event \u06a9\u0644\u0627\u0633 \u062f\u0631 \/app\/Events \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc:\n\n\n > php artisan make:event GotMessage\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0633\u067e\u0633 \u0645\u0627 \u0628\u0627\u06cc\u062f \u062f\u0648 \u0686\u06cc\u0632 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645: \u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u062a\u0648\u0635\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f \u0628\u0627\u0631 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0686\u06cc\u0633\u062a \u0648 broadcastOn() \u0631\u0648\u0634\u06cc \u0628\u0631\u0627\u06cc \u062a\u0639\u06cc\u06cc\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u062f\u0631 \u06a9\u062f\u0627\u0645 \u06a9\u0627\u0646\u0627\u0644 \u067e\u062e\u0634 \u0634\u0648\u0646\u062f:\n\n\n\n\nnamespace App\\Events;\n\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass GotMessage implements ShouldBroadcast {\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    public function __construct() {\n    }\n\n    public function broadcastOn() {\n        return  new PrivateChannel(\"channel_for_everyone\");\n    }\n}\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0646\u0627\u0645 \u06a9\u0627\u0646\u0627\u0644 (\"channel_for_everyone\") \u062f\u0631 \u0641\u0627\u06cc\u0644\u06cc \u06a9\u0647 WebSocket \u0631\u0627 \u062a\u0648\u0635\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f (\u0628\u0647 \u0632\u06cc\u0631 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f) \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u06a9\u0627\u0646\u0627\u0644 \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u0628\u06cc\u0646 \u0647\u0631 \u0646\u0645\u0648\u0646\u0647 \u0627\u0632 \u06a9\u0644\u0627\u06cc\u0646\u062a \u0686\u062a \u0648 \u0633\u0631\u0648\u0631 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0633\u0627\u0632\u0646\u062f\u0647 \u0647\u06cc\u0686 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u06cc \u0631\u0627 \u0646\u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u0647\u06cc\u0686 \u0627\u0634\u0627\u0631\u0647 \u0627\u06cc \u0628\u0647 \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0646\u062f\u0627\u0631\u062f: \u0627\u06cc\u062f\u0647 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0632\u0645\u0627\u0646\u06cc \u067e\u062e\u0634 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062c\u062f\u06cc\u062f \u0627\u0631\u0633\u0627\u0644 \u0634\u0648\u062f\u060c \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0645\u0634\u062a\u0631\u06cc \u0622\u0646 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u060c \u0622\u0646\u0647\u0627 \u0641\u0642\u0637 \u0644\u06cc\u0633\u062a \u0628\u0647 \u0631\u0648\u0632 \u0634\u062f\u0647 \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062e\u062f\u0645\u0627\u062a\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0631\u062f\u0647 \u0628\u0648\u062f\u06cc\u0645 \u0628\u0647 \u0633\u0631\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u06a9\u0646\u0646\u062f. \n\n\u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f QueueListener\u060c \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645:\n\n\n > php artisan make:job SendMessage\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f SendMessage.php \u0641\u0627\u06cc\u0644 \u062f\u0631 \/app\/Jobs \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0628\u0647 \u0686\u0627\u0631\u0686\u0648\u0628 \u0644\u0627\u0631\u0627\u0648\u0644 \u0622\u0645\u0648\u0632\u0634 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u062f GotMessage \u0631\u0648\u06cc\u062f\u0627\u062f\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u06cc\u0645:\n\n\n\n\nnamespace App\\Jobs;\n\nuse App\\Events\\GotMessage;\nuse App\\Models\\Message;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass SendMessage implements ShouldQueue {\n    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n\n    public function __construct(public Message $message) {\n        \/\/\n    }\n\n    public function handle(): void {\n        GotMessage::dispatch([\n            'id' => $this->message->id,\n            'user_id' => $this->message->user_id,\n            'text' => $this->message->text,\n            'time' => $this->message->time,\n        ]);\n    }\n}\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06cc\u0646 handle() \u0631\u0648\u0634 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f GotMessage \u0631\u0648\u06cc\u062f\u0627\u062f \u0628\u0627 \u062c\u0632\u0626\u06cc\u0627\u062a\u06cc \u0645\u0627\u0646\u0646\u062f \u067e\u06cc\u0627\u0645 id\u060c user_id\u060c text\u060c \u0648 timestamp. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0647 \u06af\u0648\u0646\u0647\u200c\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647\u060c \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0631\u0627 \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062f\u0631 \u06a9\u0627\u0646\u0627\u0644 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646\u062f \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u067e\u0631\u062f\u0627\u0632\u0634 \u06a9\u0646\u062f\u060c \u0648 \u0627\u0645\u06a9\u0627\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0622\u0645\u062f \u0648\u0638\u0627\u06cc\u0641 \u0627\u0631\u0633\u0627\u0644 \u067e\u06cc\u0627\u0645 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c \u0639\u0645\u0648\u0645\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f $message \u0648\u06cc\u0698\u06af\u06cc \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0633\u0627\u0632\u0646\u062f\u0647\u061b \u0627\u06cc\u0646 \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0631\u0622\u0645\u062f\u062a\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f \u0635\u0641 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f (\u0628\u0631\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u0628\u0647 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f). \n\n\u0628\u0627 \u0648\u062c\u0648\u062f \u062a\u0645\u0627\u0645 \u0627\u062c\u0632\u0627\u06cc \u062f\u06cc\u06af\u0631\u060c \u0627\u06a9\u0646\u0648\u0646 \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0639\u0646\u0635\u0631 PHP \u0646\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645: WebSocket.\n\n\n  \n  \n  \n  \n  \n  \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 Laravel Reverb\n\n\nLaravel Reverb \u06cc\u06a9 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0628\u0644\u0627\u062f\u0631\u0646\u06af WebSocket \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0631\u0627 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0631\u0627\u0648\u0644 \u062e\u0648\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 WebSockets \u0628\u0647 \u0641\u0631\u0627\u0646\u062a\u200c\u0627\u0646\u062f \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f. \u0628\u0627 Reverb\u060c \u0627\u0645\u06a9\u0627\u0646 \u067e\u062e\u0634 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u06cc\u0645\u060c \u062f\u0631 \u0647\u0631 \u06a9\u0644\u0627\u06cc\u0646\u062a \u0645\u062a\u0635\u0644 \u0645\u0646\u0639\u06a9\u0633 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u062c\u062f\u062f \u0635\u0641\u062d\u0647. \u0637\u0628\u0642 \u0645\u0639\u0645\u0648\u0644\u060c \u0627\u0641\u0632\u0648\u062f\u0646 \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0628\u0633\u06cc\u0627\u0631 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0627 \u06cc\u06a9 \u062f\u0633\u062a\u0648\u0631 \u0633\u0627\u062f\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f:\n\n\n > php artisan install:broadcasting\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0628\u0627 \u067e\u0630\u06cc\u0631\u0641\u062a\u0646 \u06af\u0632\u06cc\u0646\u0647 \u067e\u06cc\u0634 \u0641\u0631\u0636\u060c \u0647\u0645 \u0642\u0633\u0645\u062a PHP \u0628\u0631\u0627\u06cc backend \u0648 \u0647\u0645 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc Node \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 frontend \u0646\u0635\u0628 \u0645\u06cc \u06a9\u0646\u062f. \n\n\u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0686\u0646\u062f\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f: \u06cc\u06a9 \u0628\u062e\u0634 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f .env \u0641\u0627\u06cc\u0644 \u0628\u0631\u0627\u06cc Reverb\u060c \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 reverb.php \u0641\u0627\u06cc\u0644 \u062f\u0631 \/config \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u06cc\u0646 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u060c \u0648 \u0645\u0647\u0645\u062a\u0631 \u0627\u0632 \u0647\u0645\u0647\u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 channels.php \u0641\u0627\u06cc\u0644 \u062f\u0631 \/routes. \u062f\u0631 \u0627\u06cc\u0646 channels.php Reverb \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0622\u0646 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645 channel_for_everyone \u06a9\u0627\u0646\u0627\u0644 \u0631\u0627 \u0628\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u06a9\u062f \u0632\u06cc\u0631:\n\n\nBroadcast::channel('channel_for_everyone', function ($user) {\n    return true;\n});\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062f\u0631 \u0642\u0633\u0645\u062a \u067e\u0634\u062a\u06cc\u0628\u0627\u0646 \u0633\u0631 \u062c\u0627\u06cc \u062e\u0648\u062f \u0627\u0633\u062a. \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0631\u0648\u06cc \u0642\u0633\u0645\u062a \u062c\u0644\u0648\u06cc\u06cc \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u06cc\u0645.\n\n\n  \n  \n  \n  \n  \n  \u0633\u0627\u062e\u062a \u062c\u0644\u0648\u06cc\u06cc Vue\n\n\n\u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634\u060c \u06cc\u06a9 \u0638\u0627\u0647\u0631 \u0633\u0627\u062f\u0647 \u0628\u0627 \u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 \u06cc\u06a9\u067e\u0627\u0631\u0686\u06af\u06cc\u060c \u0628\u062f\u0648\u0646 \u0627\u0633\u062a\u0627\u06cc\u0644\u060c \u0633\u0641\u0627\u0631\u0634\u06cc \u0633\u0627\u0632\u06cc \u0641\u0648\u0646\u062a \u0648 \u063a\u06cc\u0631\u0647 \u0637\u0631\u0627\u062d\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645. \n\n\u0627\u0648\u0644\u06cc\u0646 \u0642\u062f\u0645 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u06cc\u0637 Vue \u0627\u0633\u062a:\n\n\n> npm install vue vue-router @vitejs\/plugin-vue```\n{% endraw %}\n\n\nNow we can focus on three files to integrate a Vue template in Laravel. The first one is {% raw %}`resources\/js\/app.js`{% endraw %}, which will instantiate the Vue component that contains our app:\n{% raw %}\n\n\n```javascript \nimport '.\/bootstrap';\nimport App from '.\/App.vue'\nimport { createApp } from 'vue';\n\nconst app = createApp({});\n\napp.component('app', App);\n\napp.mount(\"#app\");\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u06a9\u062f \u0633\u0627\u062f\u0647 \u0627\u0633\u062a: App.vue \u0627\u0644\u06af\u0648\u06cc Vue \u0645\u0627 \u0627\u0633\u062a \u0648 \u0645\u0627 \u0641\u0642\u0637 \u0622\u0646 \u0631\u0627 \u0628\u0627 div \u06a9\u0647 id \u0627\u0633\u062a #app \u062f\u0631 blade \u0641\u0627\u06cc\u0644 (\u0628\u0647 \u0642\u0637\u0639\u0647 \u06a9\u062f \u0628\u0639\u062f\u06cc \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f) \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0645\u0627 \u0631\u0627 \u0631\u0646\u062f\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u0641\u0627\u06cc\u0644 \u0628\u0639\u062f\u06cc \u0627\u0633\u062a resources\/js\/App.vue\u060c \u06a9\u0647 \u0634\u0627\u0645\u0644 \u0642\u0627\u0644\u0628 \u0627\u0633\u062a:\n\n\n<script setup>\nconst props = defineProps({\n    isAuth: {\n        type: Boolean,\n        default: false\n    },\n    user: {\n        type: [Object, Array],\n        required: false\n    }\n})\n<\/script>\n<template>\n    <h1>Hello, {{ user.name }}<\/h1>\n<\/template>\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u06a9\u062f \u062f\u0648 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f: \u0622\u0646 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f props \u0628\u0631\u0627\u06cc Vue \u0628\u0631\u0627\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u0645\u0642\u0627\u062f\u06cc\u0631\u06cc \u06a9\u0647 \u0627\u0632 \u0644\u0627\u0631\u0627\u0648\u0644 \u0645\u06cc \u0622\u06cc\u0646\u062f\u060c \u0648 \u0633\u067e\u0633 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0633\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c \u0645\u0627 \u0628\u0647 \u062a\u0627\u0632\u06af\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0641\u0639\u0644\u06cc \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u06cc\u0645 user \u0648 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u0646\u062f name. \n\n\u0622\u062e\u0631\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0627\u06cc\u0646 \u0627\u0633\u062a blade \u06a9\u0647 \u0645\u0624\u0644\u0641\u0647 Vue \u0648 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u0645 \u0628\u0647 \u0622\u0646 \u062a\u063a\u0630\u06cc\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0628\u0647 \u0647\u0645 \u0645\u06cc\u200c\u0686\u0633\u0628\u0627\u0646\u062f. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0641\u0642\u0637 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u0642\u0633\u0645\u062a \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u0645 resources\\views\\welcome.blade.php \u0641\u0627\u06cc\u0644:\n\n\n\n\n \n Laravel + Vue Chat\n @vite(['resources\/js\/app.js'])\n\n\n\n \n\n\n\r\n\n            \u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u0631\u0648\u0632\u0627\u0631\u06cc\u0648 \u062f\u06cc \u06a9\u06cc\u0627\u0631\u0627\u270f\ufe0f\n\nLaravel Reverb \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0648\u0628 \u0633\u0648\u06a9\u062a \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u0627\u0633\u062a \u06a9\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0631\u0627 \u0627\u0632 \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0647 \u0641\u0631\u0627\u0646\u062a\u200c\u0627\u0646\u062f \u067e\u062e\u0634 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0647\u0645\u06af\u0627\u0645 \u0633\u0627\u0632\u06cc \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u062f\u0631 \u0628\u06cc\u0646 \u0645\u0634\u062a\u0631\u06cc\u0627\u0646 \u0645\u062a\u0635\u0644 \u0628\u062f\u0648\u0646 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u062c\u062f\u062f \u0635\u0641\u062d\u0647 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. Vue \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a \u06a9\u0647 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u06cc\u06a9 \u062a\u062c\u0631\u0628\u0647 \u0638\u0627\u0647\u0631\u06cc \u0648\u0627\u06a9\u0646\u0634\u06cc \u0648 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0645\u0624\u0644\u0641\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f. \n\n\u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0648 \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0627\u0637\u0646 Laravel Reverb \u0648 Frontend \u0648\u0627\u06a9\u0646\u0634\u06cc Vue \u0628\u0631\u0631\u0633\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0637\u0628\u0642 \u0645\u0639\u0645\u0648\u0644\u060c \u06a9\u062f \u0646\u0647\u0627\u06cc\u06cc \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062e\u0632\u0646 GitHub \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a.\n\n\n  \n  \n  \n  \n  \n  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc Laravel \u0648 Vue\n\n\n\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u062a\u0648\u0633\u0639\u0647\u060c \u0628\u0627\u06cc\u062f \u0645\u062d\u06cc\u0637\u06cc \u0645\u062a\u0634\u06a9\u0644 \u0627\u0632 \u062f\u0648 \u0645\u0624\u0644\u0641\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f: \u0644\u0627\u0631\u0627\u0648\u0644 \u06a9\u0647 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 PHP \u0627\u0633\u062a \u0648 \u0645\u0624\u0644\u0641\u0647 Vue\/Node.\n\n\n    PHP: \u0646\u0633\u062e\u0647 8.2 \u06cc\u0627 \u0628\u0627\u0644\u0627\u062a\u0631 (\u0627\u062c\u0631\u0627 \u0634\u0648\u062f php -v \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0646\u0633\u062e\u0647)\n    \u0622\u0647\u0646\u06af\u0633\u0627\u0632 (\u0627\u062c\u0631\u0627 composer \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0648\u062c\u0648\u062f \u0622\u0646)\n    Node.js: \u0646\u0633\u062e\u0647 20 \u06cc\u0627 \u0628\u0627\u0644\u0627\u062a\u0631 (\u0627\u062c\u0631\u0627 \u0634\u0648\u062f node -v \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0646\u0633\u062e\u0647)\n\n\n\u062f\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0632\u06cc\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062e\u0631\u0648\u062c\u06cc \u062f\u0633\u062a\u0648\u0631 \u0628\u0627\u0644\u0627 \u0631\u0627 \u062f\u0631 \u062f\u0633\u062a\u06af\u0627\u0647 \u0648\u06cc\u0646\u062f\u0648\u0632 \u0645\u0646 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f:\n\n\n\n\u0628\u0631\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647\u060c \u0645\u0627 \u0627\u0632 SQLite \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f\u060c \u067e\u0633 \u062d\u062a\u0645\u0627 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u062e\u0648\u062f \u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u062f php.ini \u0641\u0627\u06cc\u0644 \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u062a\u0645\u0627\u0645 \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0627\u0633\u0627\u0633\u06cc \u0631\u0627 \u0628\u0631\u0622\u0648\u0631\u062f\u0647 \u06a9\u0631\u062f\u06cc\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0644\u0627\u0631\u0627\u0648\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:\n\n\n> composer create-project laravel\/laravel:^11.0 laravel_chat_demo\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u067e\u0633 \u0627\u0632 \u0622\u0645\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0631\u06cc\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u062a\u0648\u0633\u0639\u0647\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0646\u0635\u0628 \u0628\u0631\u062e\u06cc \u0627\u0644\u0632\u0627\u0645\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f. \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0628\u0647 \u0645\u062d\u06cc\u0637 \u062e\u0627\u0635 \u0634\u0645\u0627 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u062f\u060c \u0627\u0645\u0627\u060c \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc\u060c \u0633\u0639\u06cc \u06a9\u0646\u06cc\u062f \u062e\u0648\u062f \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f composer \u062f\u0633\u062a\u0648\u0631 happy (\ud83d\ude42)\u060c \u0627\u06af\u0631 \u0634\u06a9\u0627\u06cc\u062a \u06a9\u0631\u062f (\u06cc\u0627 \u0641\u0642\u0637 \u0628\u0647 \u0634\u0645\u0627 \u0647\u0634\u062f\u0627\u0631 \u062f\u0627\u062f) \u06a9\u0647 \u0628\u0633\u062a\u0647 \u0627\u06cc \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0647 \u0627\u0633\u062a\u060c \u0622\u0646 \u0628\u0633\u062a\u0647 \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f (Google \u062f\u0648\u0633\u062a \u0634\u0645\u0627\u0633\u062a). \n\n\u0648\u0642\u062a\u06cc \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062f\u0631\u0633\u062a \u0634\u062f\u060c \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:\n\n\n > php artisan serve\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06cc\u0646 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0633\u0639\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0631\u0648\u0634\u0646 \u0645\u06cc \u06a9\u0646\u062f.\n\n\n  \n  \n  \n  \n  \n  \u0633\u0627\u062e\u062a \u0645\u062f\u0644 \u062f\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0686\u062a\n\n\n\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0633\u0639\u0647 (\u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0645) \u062e\u0648\u0628 \u0627\u0633\u062a\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0631\u0648\u06cc \u0628\u062e\u0634 \u0645\u062d\u0631\u06a9 \u062a\u0648\u0633\u0639\u0647 \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u06cc\u0645. \n\n\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0646\u0648\u0634\u062a\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0686\u062a \u0647\u0633\u062a\u06cc\u0645 \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0646\u062a\u0638\u0627\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0631\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645. \u0628\u0627 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u06a9\u0627\u0645\u0644\u0627\u064b \u062c\u062f\u06cc\u062f \u062f\u0631 \u0642\u0633\u0645\u062a \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u06cc\u0645 \/app\/Models \u06a9\u0647 \u0646\u0634\u0627\u0646 \u062f\u0647\u0646\u062f\u0647 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0631\u062f \u0648 \u0628\u062f\u0644 \u0634\u062f\u0647 \u062f\u0631 \u0686\u062a \u0645\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:\n\n\n > php artisan make:model -m Message\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u06a9\u0644\u0627\u0633 \u062e\u0627\u0644\u06cc \u0627\u0633\u062a. \u0645\u0627 \u0622\u0646 \u0631\u0627 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627 \u062a\u062e\u0635\u0635\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0631\u0627 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u06cc\u062f Message.php \u0628\u0627 \u06a9\u062f \u0632\u06cc\u0631:\n\n\n\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\nclass Message extends Model\n{\n    use HasFactory;\n\n    public $table = 'messages';\n    protected $fillable = ['id', 'user_id', 'text'];\n\n    public function user(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'user_id');\n    }\n\n    public function getTimeAttribute(): string\n    {\n        return date(\n            \"d M Y, H:i:s\",\n            strtotime($this->attributes['created_at'])\n        );\n    }\n}\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u06a9\u062f \u0628\u0627\u0644\u0627 \u067e\u06cc\u0627\u0645\u06cc \u0631\u0627 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0627 \u062a\u0648\u0635\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f: \u067e\u06cc\u0627\u0645 \u0647\u0627 \u062f\u0631 \u062c\u062f\u0648\u0644\u06cc \u06a9\u0647 \u0646\u0627\u0645\u0634 \u0630\u06a9\u0631 \u0634\u062f\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u0634\u0648\u062f messages; \u0647\u0631 \u067e\u06cc\u0627\u0645 \u0634\u0627\u0645\u0644 \u0633\u0647 \u0642\u0633\u0645\u062a \u0627\u0633\u062a: id\u060c user_id\u060c \u0648 text. \u0628\u0642\u06cc\u0647 \u06a9\u062f \u062f\u0648 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f: \u062a\u0627\u0628\u0639\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u06a9\u062f \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f user \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 \u067e\u06cc\u0627\u0645 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 BelongsTo \u0635\u0641\u062a\u060c \u0648 \u062a\u0627\u0628\u0639\u06cc \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0641\u06cc\u0644\u062f \u0631\u0627 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0645\u06cc \u06a9\u0646\u062f created_at \u062f\u0631 \u0642\u0627\u0644\u0628 \u062a\u0627\u0631\u06cc\u062e \u0648 \u0632\u0645\u0627\u0646 \u0642\u0627\u0628\u0644 \u062e\u0648\u0627\u0646\u062f\u0646 \u0628\u0631\u0627\u06cc \u0627\u0646\u0633\u0627\u0646. \u062f\u0631 \u0628\u0627\u0644\u0627\u06cc \u0647\u0631 \u067e\u06cc\u0627\u0645 \u062f\u0631 \u06a9\u0627\u062f\u0631 \u0686\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u062f \u0634\u062f. \n\n\u0645\u062f\u0644\u06cc \u06a9\u0647 \u0645\u0627 \u0646\u0648\u0634\u062a\u06cc\u0645 \u0628\u0647 Eloquent (ORM \u0644\u0627\u0631\u0627\u0648\u0644) \u0646\u062d\u0648\u0647 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u0622\u0645\u0648\u0632\u0634 \u0645\u06cc \u062f\u0647\u062f\u060c \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u062c\u062f\u0648\u0644 \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u0627 \u0628\u0647 \u06cc\u06a9 \u0645\u0647\u0627\u062c\u0631\u062a \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645\u060c \u06cc\u0639\u0646\u06cc \u0642\u0637\u0639\u0647 \u0627\u06cc \u0627\u0632 \u06a9\u062f \u06a9\u0647 \u062c\u062f\u0648\u0644 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f:\n\n\n > php artisan make:migration create_message_table\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0645\u0647\u0627\u062c\u0631\u062a \u062e\u0627\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f database\\migrations\\ \u06a9\u0647 \u0646\u0627\u0645\u0634 \u0686\u06cc\u0632\u06cc \u0634\u0628\u06cc\u0647 \u0628\u0647 _create_message_table.php. \u0641\u0627\u06cc\u0644 \u0634\u0627\u0645\u0644 \u062f\u0648 \u0631\u0648\u0634 \u06a9\u0644\u06cc\u062f\u06cc \u0627\u0633\u062a: up \u0648 down. \u0627\u06cc\u0646 up \u0645\u062a\u062f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u06cc \u0631\u0627 \u062f\u0631 \u0637\u0631\u062d \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0634\u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u062c\u0627\u062f \u062c\u062f\u0627\u0648\u0644 \u062c\u062f\u06cc\u062f\u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u062a\u0648\u0646 \u0647\u0627 \u06cc\u0627 \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0627\u06cc\u0647 \u0647\u0627. \n\n\u0628\u0631\u0639\u06a9\u0633\u060c down \u0646\u0642\u0634 \u0645\u062a\u062f \u062e\u0646\u062b\u06cc \u06a9\u0631\u062f\u0646 \u06cc\u0627 \u0645\u0639\u06a9\u0648\u0633 \u06a9\u0631\u062f\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u0645\u0631\u0628\u0648\u0637\u0647 \u0627\u0633\u062a up \u0631\u0648\u0634\u060c \u0628\u0647 \u0637\u0648\u0631 \u0645\u0648\u062b\u0631 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u0628\u0647 \u0639\u0642\u0628 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f. \u0645\u0627 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0631\u0627 \u0628\u0627 \u06a9\u062f \u0632\u06cc\u0631 \u062a\u062e\u0635\u0635\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645:\n\n\n \n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration {\n    public function up(): void {\n        Schema::create('messages', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n\n            $table->foreignId('user_id')->constrained();\n            $table->text('text')->nullable();\n        });\n    }\n\n    public function down(): void {\n        Schema::dropIfExists('messages');\n    }\n};\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06cc\u0646 \u0627\u0646\u062a\u0642\u0627\u0644 \u06cc\u06a9 \u062c\u062f\u0648\u0644 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0631\u0627 \u0628\u0627 \u0686\u0646\u062f \u0641\u06cc\u0644\u062f \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f: \u0634\u0646\u0627\u0633\u0647 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06a9\u0644\u06cc\u062f \u0627\u0635\u0644\u06cc\u060c user_id \u06a9\u0647 \u0628\u0647 \u062c\u062f\u0648\u0644 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0648\u0646\u062f \u062f\u0627\u062f\u0646 \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0628\u0627 \u0641\u0631\u0633\u062a\u0646\u062f\u0647 \u0622\u0646\u0647\u0627 \u0648 \u06cc\u06a9 \u0641\u06cc\u0644\u062f \u0645\u062a\u0646\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc \u067e\u06cc\u0627\u0645 \u0627\u0631\u062c\u0627\u0639 \u0645\u06cc \u062f\u0647\u062f. \n\n\u0627\u06cc\u0646 \u062c\u062f\u0648\u0644 \u0647\u0645\u0686\u0646\u06cc\u0646 \u062f\u0627\u0631\u0627\u06cc \u0633\u062a\u0648\u0646\u200c\u0647\u0627\u06cc \u0645\u0647\u0631 \u0632\u0645\u0627\u0646\u06cc \u0627\u0633\u062a \u062a\u0627 \u0632\u0645\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0647\u0631 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u0631\u062f\u06cc\u0627\u0628\u06cc \u06a9\u0646\u062f. \u0645\u0647\u0631\u0647\u0627\u06cc \u0632\u0645\u0627\u0646\u06cc \u0627\u06cc\u0646 \u062f\u0648 \u0641\u06cc\u0644\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u0646\u062f \u06a9\u0631\u062f created_at \u0648 updated_at. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0627\u0642\u062f\u0627\u0645 \u0627\u062d\u062a\u06cc\u0627\u0637\u06cc\u060c \u0627\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0634\u0627\u0645\u0644 \u06cc\u06a9 \u0631\u0648\u0634 \u0645\u0639\u06a9\u0648\u0633 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u062c\u062f\u0648\u0644 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u062f \u0648 \u0627\u0645\u06a9\u0627\u0646 \u0628\u0627\u0632\u06af\u0634\u062a \u0622\u0633\u0627\u0646 \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u06a9\u0646\u062f. \n\n\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645:\n\n\n > php artisan migrate:fresh\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u06cc\u06a9 \u062c\u062f\u0648\u0644 \u062c\u062f\u06cc\u062f \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f. \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632 \u0628\u0648\u062f\u0647 \u0627\u0633\u062a\u060c \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f database\\database.sqlite \u0641\u0627\u06cc\u0644\n\n\n  \n  \n  \n  \n  \n  \u0627\u0641\u0632\u0648\u062f\u0646 \u062b\u0628\u062a \u0646\u0627\u0645 \u0648 \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631\n\n\n\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0641\u0636\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062f\u0627\u0631\u06cc\u0645\u060c \u0646\u0648\u0628\u062a \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0641\u0631\u0627\u0646\u062a\u200c\u0627\u0646\u062f \u0631\u0633\u06cc\u062f\u0647 \u0627\u0633\u062a. \u0647\u0646\u06af\u0627\u0645 \u062a\u0648\u0633\u0639\u0647 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0631\u0627\u0648\u0644\u060c \u0634\u0645\u0627 \u062f\u0648 \u06af\u0632\u06cc\u0646\u0647 \u0627\u0635\u0644\u06cc \u062f\u0627\u0631\u06cc\u062f: \u0627\u0648\u0644\u06cc \u0634\u0627\u0645\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 PHP \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0638\u0627\u0647\u0631 \u062e\u0648\u062f \u0627\u0633\u062a. \u062f\u0631 \u0645\u0642\u0627\u0628\u0644\u060c \u062f\u0648\u0645\u06cc \u0627\u0632 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0645\u0627\u0646\u0646\u062f Vue \u06cc\u0627 React \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \n\n\u0645\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0627\u0632 Vue \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0627\u06cc\u0646 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0627\u0632 \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 \u0628\u0633\u062a\u0647 \u0647\u0627\u06cc \u0639\u0638\u06cc\u0645 \u0648 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 npm \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646\u062f. \u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u0628\u0633\u062a\u0647 \u0645\u0646\u0627\u0633\u0628 \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u0645:\n\n\n > composer require laravel\/ui\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u06cc\u06a9 \u0628\u0627\u0631 laravel\/ui \u0628\u0633\u062a\u0647 \u0646\u0635\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0627\u0631\u0628\u0633\u062a \u062c\u0644\u0648\u06cc\u06cc \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f artisan \u062f\u0633\u062a\u0648\u0631: \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062b\u0628\u062a \u0646\u0627\u0645 \u0648 \u0648\u0631\u0648\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f. \u0641\u0642\u0637 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0686\u0642\u062f\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0627\u0634\u062f \u0627\u06af\u0631 \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u0631\u0627 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f \u0648 \u0686\u0642\u062f\u0631 \u0622\u0633\u0627\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f:\n\n\n > php artisan ui vue --auth\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0645\u0627 \u062f\u0648 \u0646\u06cc\u0645\u0647 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645: PHP \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0628\u0627 \u062f\u0633\u062a\u0648\u0631 PHP artisan serve \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0627\u0633\u062a. \u0627\u06a9\u0646\u0648\u0646 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc \u0628\u062e\u0634 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a:\n\n\n > npm install\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0631 \u062f\u0648 \u0642\u0633\u0645\u062a \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0628\u0627\u0634\u0646\u062f\u060c \u062f\u0648 \u067e\u0646\u062c\u0631\u0647 \u067e\u0648\u0633\u062a\u0647 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f. \u06cc\u06a9\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 artisan \u062f\u0633\u062a\u0648\u0631 \u0648 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0627 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631:\n\n\n > npm run dev\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u062c\u0644\u0648\u06cc \u0635\u0641\u062d\u0647 \u0631\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u062f \u0648 \u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645 \u062f\u0648\u0628\u0627\u0631\u0647 \u0622\u0646 \u0631\u0627 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f. \n\n\u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f\u060c \u0628\u062f\u0648\u0646 \u0646\u0648\u0634\u062a\u0646 \u06cc\u06a9 \u062e\u0637 \u06a9\u062f\u060c \u06cc\u06a9 \u0648\u0628 \u0633\u0627\u06cc\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0628\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u0631\u06cc\u0645. \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u06cc\u062f \u0628\u0647 http:\/\/127.0.0.1:8000\/register \u0628\u0631\u0648\u06cc\u062f \u0648 \u0648\u0627\u0631\u062f \u0648\u0628\u0633\u0627\u06cc\u062a \u0634\u0648\u06cc\u062f:\n\n\n\n\n  \n  \n  \n  \n  \n  \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u0633\u06cc\u0631\u0647\u0627 \u0628\u0631\u0627\u06cc API \u067e\u06cc\u0627\u0645 \u0686\u062a\n\n\n\u0627\u06a9\u0646\u0648\u0646\u060c \u0628\u0627\u06cc\u062f \u0645\u0633\u06cc\u0631\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc API \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u06a9\u0647 \u0642\u0631\u0627\u0631 \u0627\u0633\u062a \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0646\u06cc\u0645 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:\n\n\n  \/home  \u0628\u0631\u0627\u06cc \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc - \u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0642\u0628\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n  \/message\u060c \u06cc\u06a9 \u0631\u0648\u0634 POST HTTP \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062c\u062f\u06cc\u062f\n  \/messages  \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062a\u0645\u0627\u0645 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f\n\n\n\u0631\u0627 \u0627\u0635\u0644\u0627\u062d \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \/routes\/web.php \u0628\u0647 \u0634\u0631\u062d \u0632\u06cc\u0631\n\n\n\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Route;\nuse App\\Http\\Controllers\\HomeController;\n\nRoute::get(\"https:\/\/dev.to\/\", function () { return view('welcome'); });\n\nAuth::routes();\n\nRoute::get('\/home', [HomeController::class, 'index'])\n    ->name('home');\nRoute::get('\/messages', [HomeController::class, 'messages'])\n    ->name('messages');\nRoute::post('\/message', [HomeController::class, 'message'])\n    ->name('message');\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06a9\u0646\u0648\u0646 \u0632\u0645\u0627\u0646 \u0646\u0648\u0634\u062a\u0646 \u0627\u0633\u062a HomeController \u06a9\u0647 API \u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u06cc\u0645 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f:\n\n\n\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Jobs\\SendMessage;\nuse App\\Models\\Message;\nuse App\\Models\\User;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\n\nclass HomeController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index()\n    {\n        $user = User::where('id', auth()->id())->select([\n            'id',\n            'name',\n            'email',\n        ])->first();\n\n        return view('home', [\n            'user' => $user,\n        ]);\n    }\n\n    public function messages(): JsonResponse\n    {\n        $messages = Message::with('user')->get()->append('time');\n\n        return response()->json($messages);\n    }\n\n    public function message(Request $request): JsonResponse\n    {\n        $message = Message::create([\n            'user_id' => auth()->id(),\n            'text' => $request->get('text'),\n        ]);\n        SendMessage::dispatch($message);\n\n        return response()->json([\n            'success' => true,\n            'message' => \"Message created and job dispatched.\",\n        ]);\n    }\n}\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0646\u0637\u0642 \u067e\u0634\u062a API\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f:\n\n\n    \u062f\u0631 \/home \u0631\u0648\u0634\u060c \u0645\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f \u0634\u062f\u0647 \u0631\u0627 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645 User \u0645\u062f\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0646\u06cc\u062f\n    \u062f\u0631 \/messages \u0631\u0648\u0634\u060c \u0645\u0627 \u0647\u0645\u0647 \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0631\u0627 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0648\u0627\u06a9\u0634\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645 Message \u0645\u062f\u0644\u060c \u0634\u0627\u0645\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0645\u0631\u062a\u0628\u0637\u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 time \u0641\u06cc\u0644\u062f (\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 Accessor) \u0628\u0631\u0627\u06cc \u0647\u0631 \u06a9\u062f\u0627\u0645 message\u0648 \u0645\u062c\u0645\u0648\u0639\u0647 \u06a9\u0627\u0645\u0644 \u0631\u0627 \u0628\u0647 view \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f\n    \u062f\u0631 \/message \u0631\u0648\u0634\u060c \u0645\u0627 \u06cc\u06a9 \u0631\u0648\u0634 \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f message \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Message \u0645\u062f\u0644 \u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f SendMessage \u06a9\u0627\u0631 \u0635\u0641\n\n\n\u0648\u0642\u062a\u06cc \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062a\u0646\u0638\u06cc\u0645 \u0634\u062f\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0644\u0627\u0631\u0627\u0648\u0644 \u0648 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0635\u0641 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u062a\u0628\u0627\u062f\u0644 \u0648 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0646\u0635\u0628 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u0645.\n\n\n  \n  \n  \n  \n  \n  \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f \u0644\u0627\u0631\u0627\u0648\u0644 \u0648 \u06a9\u0627\u0631 \u0635\u0641\n\n\n\u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u0634\u063a\u0644\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 \u0635\u0641 \u0644\u0627\u0631\u0627\u0648\u0644 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0648\u0638\u0627\u06cc\u0641 \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0648 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f. \n\n\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u0646\u062f \u06a9\u0647 \u0627\u0639\u0645\u0627\u0644 \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062e\u0627\u0635\u06cc \u0631\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u062a\u0639\u0631\u06cc\u0641 \u0648 \u067e\u062e\u0634 \u06a9\u0646\u06cc\u062f\u060c \u06a9\u0647 \u0634\u0646\u0648\u0646\u062f\u06af\u0627\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0633\u067e\u0633 \u0628\u0647 \u0622\u0646\u0647\u0627 \u067e\u0627\u0633\u062e \u062f\u0647\u0646\u062f. \u0645\u0634\u0627\u063a\u0644 \u0635\u0641 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u06a9\u0627\u0631\u0647\u0627\u06cc \u0632\u0645\u0627\u0646\u200c\u0628\u0631\u060c \u0645\u0627\u0646\u0646\u062f \u0627\u0631\u0633\u0627\u0644 \u0627\u06cc\u0645\u06cc\u0644 \u06cc\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u062c\u0645\u0648\u0639\u0647\u200c\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0628\u0632\u0631\u06af\u060c \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0645\u0646\u062f\u0627\u0646 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u067e\u0627\u0633\u062e\u06af\u0648 \u0648 \u06a9\u0627\u0631\u0622\u0645\u062f \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0627\u0646\u062f. \n\n\u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627 \u0628\u0627 \u0647\u0645\u060c \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631\u06cc \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u0648 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0644\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0628\u0647\u0628\u0648\u062f \u0645\u06cc\u200c\u0628\u062e\u0634\u0646\u062f. \u0645\u0627 \u0627\u0632 \u0647\u0631 \u062f\u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f: event \u0627\u0633\u0627\u0633\u0627 \u06cc\u06a9 \u0645\u062d\u0641\u0638\u0647 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u0646\u06af\u0647 \u0645\u06cc \u062f\u0627\u0631\u062f \u0648 QueueListener \u062a\u0639\u062f\u0627\u062f \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0646\u062a\u0638\u0631 \u0627\u0631\u0633\u0627\u0644 \u0647\u0633\u062a\u0646\u062f \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u062f. \n\n\u0628\u0627 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631\u060c \u0645\u0627 \u0631\u0627 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 Event \u06a9\u0644\u0627\u0633 \u062f\u0631 \/app\/Events \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc:\n\n\n > php artisan make:event GotMessage\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0633\u067e\u0633 \u0645\u0627 \u0628\u0627\u06cc\u062f \u062f\u0648 \u0686\u06cc\u0632 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645: \u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u062a\u0648\u0635\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f \u0628\u0627\u0631 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0686\u06cc\u0633\u062a \u0648 broadcastOn() \u0631\u0648\u0634\u06cc \u0628\u0631\u0627\u06cc \u062a\u0639\u06cc\u06cc\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u062f\u0631 \u06a9\u062f\u0627\u0645 \u06a9\u0627\u0646\u0627\u0644 \u067e\u062e\u0634 \u0634\u0648\u0646\u062f:\n\n\n\n\nnamespace App\\Events;\n\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass GotMessage implements ShouldBroadcast {\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    public function __construct() {\n    }\n\n    public function broadcastOn() {\n        return  new PrivateChannel(\"channel_for_everyone\");\n    }\n}\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0646\u0627\u0645 \u06a9\u0627\u0646\u0627\u0644 (\"channel_for_everyone\") \u062f\u0631 \u0641\u0627\u06cc\u0644\u06cc \u06a9\u0647 WebSocket \u0631\u0627 \u062a\u0648\u0635\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f (\u0628\u0647 \u0632\u06cc\u0631 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f) \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u06a9\u0627\u0646\u0627\u0644 \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u0628\u06cc\u0646 \u0647\u0631 \u0646\u0645\u0648\u0646\u0647 \u0627\u0632 \u06a9\u0644\u0627\u06cc\u0646\u062a \u0686\u062a \u0648 \u0633\u0631\u0648\u0631 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0633\u0627\u0632\u0646\u062f\u0647 \u0647\u06cc\u0686 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u06cc \u0631\u0627 \u0646\u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u0647\u06cc\u0686 \u0627\u0634\u0627\u0631\u0647 \u0627\u06cc \u0628\u0647 \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0646\u062f\u0627\u0631\u062f: \u0627\u06cc\u062f\u0647 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0632\u0645\u0627\u0646\u06cc \u067e\u062e\u0634 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062c\u062f\u06cc\u062f \u0627\u0631\u0633\u0627\u0644 \u0634\u0648\u062f\u060c \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0645\u0634\u062a\u0631\u06cc \u0622\u0646 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u060c \u0622\u0646\u0647\u0627 \u0641\u0642\u0637 \u0644\u06cc\u0633\u062a \u0628\u0647 \u0631\u0648\u0632 \u0634\u062f\u0647 \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062e\u062f\u0645\u0627\u062a\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0631\u062f\u0647 \u0628\u0648\u062f\u06cc\u0645 \u0628\u0647 \u0633\u0631\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u06a9\u0646\u0646\u062f. \n\n\u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f QueueListener\u060c \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645:\n\n\n > php artisan make:job SendMessage\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f SendMessage.php \u0641\u0627\u06cc\u0644 \u062f\u0631 \/app\/Jobs \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0628\u0647 \u0686\u0627\u0631\u0686\u0648\u0628 \u0644\u0627\u0631\u0627\u0648\u0644 \u0622\u0645\u0648\u0632\u0634 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u062f GotMessage \u0631\u0648\u06cc\u062f\u0627\u062f\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u06cc\u0645:\n\n\n\n\nnamespace App\\Jobs;\n\nuse App\\Events\\GotMessage;\nuse App\\Models\\Message;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass SendMessage implements ShouldQueue {\n    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n\n    public function __construct(public Message $message) {\n        \/\/\n    }\n\n    public function handle(): void {\n        GotMessage::dispatch([\n            'id' => $this->message->id,\n            'user_id' => $this->message->user_id,\n            'text' => $this->message->text,\n            'time' => $this->message->time,\n        ]);\n    }\n}\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0627\u06cc\u0646 handle() \u0631\u0648\u0634 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f GotMessage \u0631\u0648\u06cc\u062f\u0627\u062f \u0628\u0627 \u062c\u0632\u0626\u06cc\u0627\u062a\u06cc \u0645\u0627\u0646\u0646\u062f \u067e\u06cc\u0627\u0645 id\u060c user_id\u060c text\u060c \u0648 timestamp. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0647 \u06af\u0648\u0646\u0647\u200c\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647\u060c \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0631\u0627 \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062f\u0631 \u06a9\u0627\u0646\u0627\u0644 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646\u062f \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u067e\u0631\u062f\u0627\u0632\u0634 \u06a9\u0646\u062f\u060c \u0648 \u0627\u0645\u06a9\u0627\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0622\u0645\u062f \u0648\u0638\u0627\u06cc\u0641 \u0627\u0631\u0633\u0627\u0644 \u067e\u06cc\u0627\u0645 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c \u0639\u0645\u0648\u0645\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f $message \u0648\u06cc\u0698\u06af\u06cc \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0633\u0627\u0632\u0646\u062f\u0647\u061b \u0627\u06cc\u0646 \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0631\u0622\u0645\u062f\u062a\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f \u0635\u0641 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f (\u0628\u0631\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u0628\u0647 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f). \n\n\u0628\u0627 \u0648\u062c\u0648\u062f \u062a\u0645\u0627\u0645 \u0627\u062c\u0632\u0627\u06cc \u062f\u06cc\u06af\u0631\u060c \u0627\u06a9\u0646\u0648\u0646 \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0639\u0646\u0635\u0631 PHP \u0646\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645: WebSocket.\n\n\n  \n  \n  \n  \n  \n  \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 Laravel Reverb\n\n\nLaravel Reverb \u06cc\u06a9 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0628\u0644\u0627\u062f\u0631\u0646\u06af WebSocket \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0631\u0627 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0631\u0627\u0648\u0644 \u062e\u0648\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 WebSockets \u0628\u0647 \u0641\u0631\u0627\u0646\u062a\u200c\u0627\u0646\u062f \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f. \u0628\u0627 Reverb\u060c \u0627\u0645\u06a9\u0627\u0646 \u067e\u062e\u0634 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u06cc\u0645\u060c \u062f\u0631 \u0647\u0631 \u06a9\u0644\u0627\u06cc\u0646\u062a \u0645\u062a\u0635\u0644 \u0645\u0646\u0639\u06a9\u0633 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u062c\u062f\u062f \u0635\u0641\u062d\u0647. \u0637\u0628\u0642 \u0645\u0639\u0645\u0648\u0644\u060c \u0627\u0641\u0632\u0648\u062f\u0646 \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0628\u0633\u06cc\u0627\u0631 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0627 \u06cc\u06a9 \u062f\u0633\u062a\u0648\u0631 \u0633\u0627\u062f\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f:\n\n\n > php artisan install:broadcasting\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u0628\u0627 \u067e\u0630\u06cc\u0631\u0641\u062a\u0646 \u06af\u0632\u06cc\u0646\u0647 \u067e\u06cc\u0634 \u0641\u0631\u0636\u060c \u0647\u0645 \u0642\u0633\u0645\u062a PHP \u0628\u0631\u0627\u06cc backend \u0648 \u0647\u0645 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc Node \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 frontend \u0646\u0635\u0628 \u0645\u06cc \u06a9\u0646\u062f. \n\n\u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0686\u0646\u062f\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f: \u06cc\u06a9 \u0628\u062e\u0634 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f .env \u0641\u0627\u06cc\u0644 \u0628\u0631\u0627\u06cc Reverb\u060c \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 reverb.php \u0641\u0627\u06cc\u0644 \u062f\u0631 \/config \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u06cc\u0646 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u060c \u0648 \u0645\u0647\u0645\u062a\u0631 \u0627\u0632 \u0647\u0645\u0647\u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 channels.php \u0641\u0627\u06cc\u0644 \u062f\u0631 \/routes. \u062f\u0631 \u0627\u06cc\u0646 channels.php Reverb \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0622\u0646 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645 channel_for_everyone \u06a9\u0627\u0646\u0627\u0644 \u0631\u0627 \u0628\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u06a9\u062f \u0632\u06cc\u0631:\n\n\nBroadcast::channel('channel_for_everyone', function ($user) {\n    return true;\n});\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062f\u0631 \u0642\u0633\u0645\u062a \u067e\u0634\u062a\u06cc\u0628\u0627\u0646 \u0633\u0631 \u062c\u0627\u06cc \u062e\u0648\u062f \u0627\u0633\u062a. \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0631\u0648\u06cc \u0642\u0633\u0645\u062a \u062c\u0644\u0648\u06cc\u06cc \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u06cc\u0645.\n\n\n  \n  \n  \n  \n  \n  \u0633\u0627\u062e\u062a \u062c\u0644\u0648\u06cc\u06cc Vue\n\n\n\u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634\u060c \u06cc\u06a9 \u0638\u0627\u0647\u0631 \u0633\u0627\u062f\u0647 \u0628\u0627 \u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 \u06cc\u06a9\u067e\u0627\u0631\u0686\u06af\u06cc\u060c \u0628\u062f\u0648\u0646 \u0627\u0633\u062a\u0627\u06cc\u0644\u060c \u0633\u0641\u0627\u0631\u0634\u06cc \u0633\u0627\u0632\u06cc \u0641\u0648\u0646\u062a \u0648 \u063a\u06cc\u0631\u0647 \u0637\u0631\u0627\u062d\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645. \n\n\u0627\u0648\u0644\u06cc\u0646 \u0642\u062f\u0645 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u06cc\u0637 Vue \u0627\u0633\u062a:\n\n\n> npm install vue vue-router @vitejs\/plugin-vue```\n{% endraw %}\n\n\nNow we can focus on three files to integrate a Vue template in Laravel. The first one is {% raw %}`resources\/js\/app.js`{% endraw %}, which will instantiate the Vue component that contains our app:\n{% raw %}\n\n\n```javascript \nimport '.\/bootstrap';\nimport App from '.\/App.vue'\nimport { createApp } from 'vue';\n\nconst app = createApp({});\n\napp.component('app', App);\n\napp.mount(\"#app\");\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u06a9\u062f \u0633\u0627\u062f\u0647 \u0627\u0633\u062a: App.vue \u0627\u0644\u06af\u0648\u06cc Vue \u0645\u0627 \u0627\u0633\u062a \u0648 \u0645\u0627 \u0641\u0642\u0637 \u0622\u0646 \u0631\u0627 \u0628\u0627 div \u06a9\u0647 id \u0627\u0633\u062a #app \u062f\u0631 blade \u0641\u0627\u06cc\u0644 (\u0628\u0647 \u0642\u0637\u0639\u0647 \u06a9\u062f \u0628\u0639\u062f\u06cc \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f) \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0645\u0627 \u0631\u0627 \u0631\u0646\u062f\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u0641\u0627\u06cc\u0644 \u0628\u0639\u062f\u06cc \u0627\u0633\u062a resources\/js\/App.vue\u060c \u06a9\u0647 \u0634\u0627\u0645\u0644 \u0642\u0627\u0644\u0628 \u0627\u0633\u062a:\n\n\n<script setup>\nconst props = defineProps({\n    isAuth: {\n        type: Boolean,\n        default: false\n    },\n    user: {\n        type: [Object, Array],\n        required: false\n    }\n})\n<\/script>\n<template>\n    <h1>Hello, {{ user.name }}<\/h1>\n<\/template>\n\n\n\n    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f\n    \n\n\n    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\n    \n\n\n\n\n\n\n\n\n\u06a9\u062f \u062f\u0648 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f: \u0622\u0646 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f props \u0628\u0631\u0627\u06cc Vue \u0628\u0631\u0627\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u0645\u0642\u0627\u062f\u06cc\u0631\u06cc \u06a9\u0647 \u0627\u0632 \u0644\u0627\u0631\u0627\u0648\u0644 \u0645\u06cc \u0622\u06cc\u0646\u062f\u060c \u0648 \u0633\u067e\u0633 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0633\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c \u0645\u0627 \u0628\u0647 \u062a\u0627\u0632\u06af\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0641\u0639\u0644\u06cc \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u06cc\u0645 user \u0648 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u0646\u062f name. \n\n\u0622\u062e\u0631\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0627\u06cc\u0646 \u0627\u0633\u062a blade \u06a9\u0647 \u0645\u0624\u0644\u0641\u0647 Vue \u0648 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u0645 \u0628\u0647 \u0622\u0646 \u062a\u063a\u0630\u06cc\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0628\u0647 \u0647\u0645 \u0645\u06cc\u200c\u0686\u0633\u0628\u0627\u0646\u062f. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0641\u0642\u0637 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u0642\u0633\u0645\u062a \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u0645 resources\\views\\welcome.blade.php \u0641\u0627\u06cc\u0644:\n\n\n\n\n \n Laravel + Vue Chat\n @vite(['resources\/js\/app.js'])\n\n\n\n \n\n\n\r\n\r\n","publisher":{"@id":"#Publisher","@type":"Organization","name":"\u0645\u0642\u0627\u0644\u0627\u062a \u0646\u0627\u0628 \u0641\u0627\u0644\u0648\u0648\u0631","logo":{"@type":"ImageObject","url":"https:\/\/nabfollower.com\/blog\/wp-content\/themes\/jannah\/assets\/images\/logo@2x.png"},"sameAs":["https:\/\/www.facebook.com\/nabfollower.real","https:\/\/twitter.com\/nabfollower","https:\/\/www.pinterest.de\/nabfollower\/","https:\/\/youtube.com\/channel\/UCN2r-A3LGEuqbjJrMA0ASJw","https:\/\/www.instagram.com\/nabfollower_com\/?hl=en","https:\/\/t.me\/Nabfollower"]},"sourceOrganization":{"@id":"#Publisher"},"copyrightHolder":{"@id":"#Publisher"},"mainEntityOfPage":{"@type":"WebPage","@id":"https:\/\/nabfollower.com\/blog\/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe\/","breadcrumb":{"@id":"#Breadcrumb"}},"author":{"@type":"Person","name":"ek3nk4r","url":"https:\/\/nabfollower.com\/blog\/author\/ek3nk4r\/"},"image":{"@type":"ImageObject","url":"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2024\/11\/\u0633\u0627\u062e\u062a-\u06cc\u06a9-\u0628\u0631\u0646\u0627\u0645\u0647-\u0686\u062a-\u0628\u0644\u0627\u062f\u0631\u0646\u06af-\u0628\u0627-\u0627\u0633\u062a\u0641\u0627\u062f\u0647-\u0627\u0632-Laravel-Reverb.png","width":1200,"height":500}}</script>

		<div id="share-buttons-bottom" class="share-buttons share-buttons-bottom">
			<div class="share-links  icons-only">
										<div class="share-title">
							<span class="tie-icon-share" aria-hidden="true"></span>
							<span> هم‌رسانی</span>
						</div>
						
				<a href="https://www.facebook.com/sharer.php?u=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="فیس بوک" target="_blank" class="facebook-share-btn " data-raw="https://www.facebook.com/sharer.php?u={post_link}">
					<span class="share-btn-icon tie-icon-facebook"></span> <span class="screen-reader-text">فیس بوک</span>
				</a>
				<a href="https://twitter.com/intent/tweet?text=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue&url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="توییتر (X)" target="_blank" class="twitter-share-btn " data-raw="https://twitter.com/intent/tweet?text={post_title}&url={post_link}">
					<span class="share-btn-icon tie-icon-twitter"></span> <span class="screen-reader-text">توییتر (X)</span>
				</a>
				<a href="https://www.linkedin.com/shareArticle?mini=true&url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&title=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue" rel="external noopener nofollow" title="لینکدین" target="_blank" class="linkedin-share-btn " data-raw="https://www.linkedin.com/shareArticle?mini=true&url={post_full_link}&title={post_title}">
					<span class="share-btn-icon tie-icon-linkedin"></span> <span class="screen-reader-text">لینکدین</span>
				</a>
				<a href="https://www.tumblr.com/share/link?url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&name=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue" rel="external noopener nofollow" title="‫تامبلر" target="_blank" class="tumblr-share-btn " data-raw="https://www.tumblr.com/share/link?url={post_link}&name={post_title}">
					<span class="share-btn-icon tie-icon-tumblr"></span> <span class="screen-reader-text">‫تامبلر</span>
				</a>
				<a href="https://pinterest.com/pin/create/button/?url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&description=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue&media=https://nabfollower.com/blog/wp-content/uploads/2024/11/ساخت-یک-برنامه-چت-بلادرنگ-با-استفاده-از-Laravel-Reverb.png" rel="external noopener nofollow" title="‫پین‌ترست" target="_blank" class="pinterest-share-btn " data-raw="https://pinterest.com/pin/create/button/?url={post_link}&description={post_title}&media={post_img}">
					<span class="share-btn-icon tie-icon-pinterest"></span> <span class="screen-reader-text">‫پین‌ترست</span>
				</a>
				<a href="https://reddit.com/submit?url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&title=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue" rel="external noopener nofollow" title="‫رددیت" target="_blank" class="reddit-share-btn " data-raw="https://reddit.com/submit?url={post_link}&title={post_title}">
					<span class="share-btn-icon tie-icon-reddit"></span> <span class="screen-reader-text">‫رددیت</span>
				</a>
				<a href="https://vk.com/share.php?url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="‫VKontakte" target="_blank" class="vk-share-btn " data-raw="https://vk.com/share.php?url={post_link}">
					<span class="share-btn-icon tie-icon-vk"></span> <span class="screen-reader-text">‫VKontakte</span>
				</a>
				<a href="https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&st.shareUrl=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&description=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue&media=https://nabfollower.com/blog/wp-content/uploads/2024/11/ساخت-یک-برنامه-چت-بلادرنگ-با-استفاده-از-Laravel-Reverb.png" rel="external noopener nofollow" title="‫Odnoklassniki" target="_blank" class="odnoklassniki-share-btn " data-raw="https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&st.shareUrl={post_link}&description={post_title}&media={post_img}">
					<span class="share-btn-icon tie-icon-odnoklassniki"></span> <span class="screen-reader-text">‫Odnoklassniki</span>
				</a>
				<a href="https://getpocket.com/save?title=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue&url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="پاکت" target="_blank" class="pocket-share-btn " data-raw="https://getpocket.com/save?title={post_title}&url={post_link}">
					<span class="share-btn-icon tie-icon-get-pocket"></span> <span class="screen-reader-text">پاکت</span>
				</a>
				<a href="mailto:?subject=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue&body=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="رایانامه" target="_blank" class="email-share-btn " data-raw="mailto:?subject={post_title}&body={post_link}">
					<span class="share-btn-icon tie-icon-envelope"></span> <span class="screen-reader-text">رایانامه</span>
				</a>
				<a href="#" rel="external noopener nofollow" title="چاپ" target="_blank" class="print-share-btn " data-raw="#">
					<span class="share-btn-icon tie-icon-print"></span> <span class="screen-reader-text">چاپ</span>
				</a>			</div><!-- .share-links /-->
		</div><!-- .share-buttons /-->

		
	</article><!-- #the-post /-->

	
	<div class="post-components">

		
		<div class="about-author container-wrapper about-author-2">

								<div class="author-avatar">
						<a href="https://nabfollower.com/blog/author/ek3nk4r/">
							<img alt='تصویر ek3nk4r' src='https://secure.gravatar.com/avatar/1491a1837afc941cd5334f4a38a3aede5bf19483d37c0b6dd0447c5f952570b4?s=180&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/1491a1837afc941cd5334f4a38a3aede5bf19483d37c0b6dd0447c5f952570b4?s=360&d=mm&r=g 2x' class='avatar avatar-180 photo' height='180' width='180' loading='lazy' decoding='async'/>						</a>
					</div><!-- .author-avatar /-->
					
			<div class="author-info">

											<h3 class="author-name"><a href="https://nabfollower.com/blog/author/ek3nk4r/">ek3nk4r</a></h3>
						
				<div class="author-bio">
									</div><!-- .author-bio /-->

				<ul class="social-icons"></ul>			</div><!-- .author-info /-->
			<div class="clearfix"></div>
		</div><!-- .about-author /-->
		
<div class="container-wrapper" id="post-newsletter">
	<div class="subscribe-widget">
		<div class="widget-inner-wrap">

			<span class="tie-icon-envelope newsletter-icon" aria-hidden="true"></span>

			
					<div class="subscribe-widget-content">
						<span class="subscribe-subtitle">با ما بروز باشید</span>
<h3>در خبرنامه سایت ما عضو شوید و جدیدترین ها را در ایمیل خود دریافت کنید</h3>
<p>ایرانی لایق بهترین ها می باشد</p>					</div>

										<div id="mc_embed_signup">
						<form action="#" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="subscribe-form validate" target="_blank" novalidate>
							<div id="mc_embed_signup_scroll">
								<div class="mc-field-group">
									<label class="screen-reader-text" for="mce-EMAIL">آدرس ایمیل خود را وارد کنید</label>
									<input type="email" value="" id="mce-EMAIL" placeholder="آدرس ایمیل خود را وارد کنید" name="EMAIL" class="subscribe-input required email" id="mce-EMAIL">
								</div>
								<div id="mce-responses" class="clear">
									<div class="response" id="mce-error-response" style="display:none"></div>
									<div class="response" id="mce-success-response" style="display:none"></div>
								</div>
								<input type="submit" value="مشترک شوید" name="subscribe" id="mc-embedded-subscribe" class="button subscribe-submit">
							</div>
						</form>
					</div>
					
		</div><!-- .widget-inner-wrap /-->
	</div><!-- .subscribe-widget /-->
</div><!-- #post-newsletter /-->

<div class="prev-next-post-nav container-wrapper media-overlay">
			<div class="tie-col-xs-6 prev-post">
				<a href="https://nabfollower.com/blog/spyro-is-25-and-time-never-stops/" style="background-image: url(https://nabfollower.com/blog/wp-content/uploads/2024/11/Spyro-2-25-بودن-باعث-می-شود-احساس-جوانی-کنم-390x220.jpg)" class="post-thumb" rel="prev">
					<div class="post-thumb-overlay-wrap">
						<div class="post-thumb-overlay">
							<span class="tie-icon tie-media-icon"></span>
							<span class="screen-reader-text">Spyro 2 25 بودن باعث می شود احساس جوانی کنم</span>
						</div>
					</div>
				</a>

				<a href="https://nabfollower.com/blog/spyro-is-25-and-time-never-stops/" rel="prev">
					<h3 class="post-title">Spyro 2 25 بودن باعث می شود احساس جوانی کنم</h3>
				</a>
			</div>

			
			<div class="tie-col-xs-6 next-post">
				<a href="https://nabfollower.com/blog/cod-bo6-zombies-how-to-activate-the-music-song-easter-egg-on-terminus/" style="background-image: url(https://nabfollower.com/blog/wp-content/uploads/2024/11/نحوه-باز-کردن-ترانه-ترمینوس-ایستر-اگ-در-Black-Ops-390x220.jpg)" class="post-thumb" rel="next">
					<div class="post-thumb-overlay-wrap">
						<div class="post-thumb-overlay">
							<span class="tie-icon tie-media-icon"></span>
							<span class="screen-reader-text">نحوه باز کردن ترانه ترمینوس ایستر اگ در Black Ops 6</span>
						</div>
					</div>
				</a>

				<a href="https://nabfollower.com/blog/cod-bo6-zombies-how-to-activate-the-music-song-easter-egg-on-terminus/" rel="next">
					<h3 class="post-title">نحوه باز کردن ترانه ترمینوس ایستر اگ در Black Ops 6</h3>
				</a>
			</div>

			</div><!-- .prev-next-post-nav /-->
	

				<div id="related-posts" class="container-wrapper has-extra-post">

					<div class="mag-box-title the-global-title">
						<h3>نوشته های مشابه</h3>
					</div>

					<div class="related-posts-list">

					
							<div class="related-item tie-standard">

								
			<a aria-label="نسخه ی نمایشی نوار ماکت AI توضیح داد" href="https://nabfollower.com/blog/ai-mocktail-bar-demo-explained-41ok/" class="post-thumb"><img width="390" height="220" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/نسخه-ی-نمایشی-نوار-ماکت-AI-توضیح-داد-390x220.png" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="نسخه ی نمایشی نوار ماکت AI توضیح داد" title="نسخه ی نمایشی نوار ماکت AI توضیح داد" decoding="async" /></a>
								<h3 class="post-title"><a href="https://nabfollower.com/blog/ai-mocktail-bar-demo-explained-41ok/">نسخه ی نمایشی نوار ماکت AI توضیح داد</a></h3>

								<div class="post-meta clearfix"><span class="date meta-item tie-icon">3 هفته پیش</span></div><!-- .post-meta -->							</div><!-- .related-item /-->

						
							<div class="related-item tie-standard">

								
			<a aria-label="گره سفارشی N8N خود را ایجاد کنید" href="https://nabfollower.com/blog/%da%af%d8%b1%d9%87-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-n8n-%d8%ae%d9%88%d8%af-%d8%b1%d8%a7-%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%da%a9%d9%86%db%8c%d8%af/" class="post-thumb"><img post-id="111693" fifu-featured="1" width="390" height="220" src="https://i0.wp.com/media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2o75dodq8ke5lr0j14jn.png?w=390&resize=390,220&ssl=1" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="گره سفارشی N8N خود را ایجاد کنید" title="گره سفارشی N8N خود را ایجاد کنید" title="گره سفارشی N8N خود را ایجاد کنید" decoding="async" /></a>
								<h3 class="post-title"><a href="https://nabfollower.com/blog/%da%af%d8%b1%d9%87-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-n8n-%d8%ae%d9%88%d8%af-%d8%b1%d8%a7-%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%da%a9%d9%86%db%8c%d8%af/">گره سفارشی N8N خود را ایجاد کنید</a></h3>

								<div class="post-meta clearfix"><span class="date meta-item tie-icon">3 هفته پیش</span></div><!-- .post-meta -->							</div><!-- .related-item /-->

						
							<div class="related-item tie-standard">

								
			<a aria-label="🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟" href="https://nabfollower.com/blog/why-cloud-native-devops-are-a-must-for-every-modern-company-52mb/" class="post-thumb"><img width="390" height="220" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/چرا-Cloud-Native-DevOps-برای-هر-شرکت-مدرن-ضروری-390x220.png" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟" title="🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟" decoding="async" /></a>
								<h3 class="post-title"><a href="https://nabfollower.com/blog/why-cloud-native-devops-are-a-must-for-every-modern-company-52mb/">🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟</a></h3>

								<div class="post-meta clearfix"><span class="date meta-item tie-icon">3 هفته پیش</span></div><!-- .post-meta -->							</div><!-- .related-item /-->

						
							<div class="related-item tie-standard">

								
			<a aria-label="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" href="https://nabfollower.com/blog/%d8%aa%d9%88%d8%b3%d8%b9%d9%87-harmonyos-xi-%d8%a7%d8%ac%d8%b1%d8%a7%db%8c-%d8%b5%d9%81%d8%ad%d9%87-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d8%b1%d8%b3%d8%a7%d9%84-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7/" class="post-thumb"><img post-id="111687" fifu-featured="1" width="390" height="220" src="https://i0.wp.com/media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3q7crmpwr4o24kxip1ia.jpg?w=390&resize=390,220&ssl=1" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" title="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" title="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" decoding="async" /></a>
								<h3 class="post-title"><a href="https://nabfollower.com/blog/%d8%aa%d9%88%d8%b3%d8%b9%d9%87-harmonyos-xi-%d8%a7%d8%ac%d8%b1%d8%a7%db%8c-%d8%b5%d9%81%d8%ad%d9%87-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d8%b1%d8%b3%d8%a7%d9%84-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7/">توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی</a></h3>

								<div class="post-meta clearfix"><span class="date meta-item tie-icon">3 هفته پیش</span></div><!-- .post-meta -->							</div><!-- .related-item /-->

						
					</div><!-- .related-posts-list /-->
				</div><!-- #related-posts /-->

				<div id="comments" class="comments-area">

		

		<div id="add-comment-block" class="container-wrapper">	<div id="respond" class="comment-respond">
		<h3 id="reply-title" class="comment-reply-title the-global-title">دیدگاهتان را بنویسید <small><a rel="nofollow" id="cancel-comment-reply-link" href="/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/#respond" style="display:none;">لغو پاسخ</a></small></h3><form action="https://nabfollower.com/blog/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">نشانی ایمیل شما منتشر نخواهد شد.</span> <span class="required-field-message">بخش‌های موردنیاز علامت‌گذاری شده‌اند <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">دیدگاه <span class="required">*</span></label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p><p class="comment-form-author"><label for="author">نام <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p>
<p class="comment-form-email"><label for="email">ایمیل <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p>
<p class="comment-form-url"><label for="url">وب‌ سایت</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /></p>
<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی می‌نویسم.</label></p>
<p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="فرستادن دیدگاه" /> <input type='hidden' name='comment_post_ID' value='83549' id='comment_post_ID' />
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
</p></form>	</div><!-- #respond -->
	</div><!-- #add-comment-block /-->
	</div><!-- .comments-area -->


	</div><!-- .post-components /-->

	
</div><!-- .main-content -->


	<div id="check-also-box" class="container-wrapper check-also-left">

		<div class="widget-title the-global-title">
			<div class="the-subtitle">همچنین ببینید</div>

			<a href="#" id="check-also-close" class="remove">
				<span class="screen-reader-text">بستن</span>
			</a>
		</div>

		<div class="widget posts-list-big-first has-first-big-post">
			<ul class="posts-list-items">

			
<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" href="https://nabfollower.com/blog/%d8%aa%d9%88%d8%b3%d8%b9%d9%87-harmonyos-xi-%d8%a7%d8%ac%d8%b1%d8%a7%db%8c-%d8%b5%d9%81%d8%ad%d9%87-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d8%b1%d8%b3%d8%a7%d9%84-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7/" class="post-thumb"><span class="post-cat-wrap"><span class="post-cat tie-cat-339">برنامه نویسی</span></span><img post-id="111687" fifu-featured="1" width="390" height="220" src="https://i0.wp.com/media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3q7crmpwr4o24kxip1ia.jpg?w=390&resize=390,220&ssl=1" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" title="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" title="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/%d8%aa%d9%88%d8%b3%d8%b9%d9%87-harmonyos-xi-%d8%a7%d8%ac%d8%b1%d8%a7%db%8c-%d8%b5%d9%81%d8%ad%d9%87-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d8%b1%d8%b3%d8%a7%d9%84-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7/">توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">3 هفته پیش</span>		</div>
	</div>
</li>

			</ul><!-- .related-posts-list /-->
		</div>
	</div><!-- #related-posts /-->

	
	<aside class="sidebar tie-col-md-4 tie-col-xs-12 normal-side is-sticky" aria-label="سایدبار اصلی">
		<div class="theiaStickySidebar">
			<div id="media_image-2" class="container-wrapper widget widget_media_image"><a href="https://nabfollower.com"><img width="300" height="233" src="https://nabfollower.com/blog/wp-content/uploads/2024/05/2024-04-21_23-56-28_9089-removebg-preview-300x233.png" class="image wp-image-63504  attachment-medium size-medium" alt="" style="max-width: 100%; height: auto;" decoding="async" srcset="https://nabfollower.com/blog/wp-content/uploads/2024/05/2024-04-21_23-56-28_9089-removebg-preview-300x233.png 300w, https://nabfollower.com/blog/wp-content/uploads/2024/05/2024-04-21_23-56-28_9089-removebg-preview.png 566w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><div class="clearfix"></div></div><!-- .widget /--><div id="text-html-widget-2" class="container-wrapper widget text-html"><div class="widget-title the-global-title"><div class="the-subtitle">خرید خدمات شبکه های اجتماعی<span class="widget-title-icon tie-icon"></span></div></div><div style="text-align:center;"><a href="https://nabfollower.com/">خرید فالوور اینستاگرام</a>
<br>
<a href="https://nabfollower.com/buy-real-follower/">خرید فالوور ایرانی اینستاگرام</a>
<br>
<a href="https://nabfollower.com/buy-instagram-like/">خرید لایک اینستاگرام</a>

<br>
<a href="https://nabfollower.com/buy-instagram-views/">خرید بازدید اینستاگرام</a>
<br>

<a href="https://nabfollower.com/buy-instagram-explore-service/">خرید خدمات اکسپلور اینستاگرام</a>
<br>
</div><div class="clearfix"></div></div><!-- .widget /-->
			<div id="widget_tabs-1" class="container-wrapper tabs-container-wrapper tabs-container-4">
				<div class="widget tabs-widget">
					<div class="widget-container">
						<div class="tabs-widget">
							<div class="tabs-wrapper">

								<ul class="tabs">
									<li><a href="#widget_tabs-1-popular">پرخواننده</a></li><li><a href="#widget_tabs-1-recent">تازه</a></li><li><a href="#widget_tabs-1-comments">نظرها</a></li>								</ul><!-- ul.tabs-menu /-->

								
											<div id="widget_tabs-1-popular" class="tab-content tab-content-popular">
												<ul class="tab-content-elements">
													
<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="Blox Fruits Codes (آوریل 2023)" href="https://nabfollower.com/blog/roblox-blox-fruits-codes/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2023/04/Blox-Fruits-Codes-آوریل-2023-220x150.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="Blox Fruits Codes (آوریل 2023)" title="Blox Fruits Codes (آوریل 2023)" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/roblox-blox-fruits-codes/">Blox Fruits Codes (آوریل 2023)</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2023-04-10</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="پیش‌بینی قیمت لایت‌کوین به‌عنوان رویکردهای رویداد نصف‌کننده – آیا LTC می‌تواند از اینجا 100 برابر کند؟" href="https://nabfollower.com/blog/litecoin-price-prediction-as-halving-event-approaches-can-ltc-100x-from-here-htm/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2023/07/1690317209_پیش‌بینی-قیمت-لایت‌کوین-به‌عنوان-رویکردهای-رویداد-نصف‌کننده-–-آیا-LTC-220x150.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="پیش‌بینی قیمت لایت‌کوین به‌عنوان رویکردهای رویداد نصف‌کننده – آیا LTC می‌تواند از اینجا 100 برابر کند؟" title="پیش‌بینی قیمت لایت‌کوین به‌عنوان رویکردهای رویداد نصف‌کننده – آیا LTC می‌تواند از اینجا 100 برابر کند؟" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/litecoin-price-prediction-as-halving-event-approaches-can-ltc-100x-from-here-htm/">پیش‌بینی قیمت لایت‌کوین به‌عنوان رویکردهای رویداد نصف‌کننده – آیا LTC می‌تواند از اینجا 100 برابر کند؟</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2023-07-26</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="بهترین وینگرها در فیفا 23" href="https://nabfollower.com/blog/fifa-23-best-wingers/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2023/02/1676808128_بهترین-وینگرها-در-فیفا-23-220x150.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="بهترین وینگرها در فیفا 23" title="بهترین وینگرها در فیفا 23" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/fifa-23-best-wingers/">بهترین وینگرها در فیفا 23</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2023-02-19</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="خطای سرور داخلی Character AI 500: چگونه آن را برطرف کنیم" href="https://nabfollower.com/blog/character-ai-500-internal-server-error-how-to-fix/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2023/05/سرور-داخلی-Character-AI-500-چگونه-آن-را-برطرف-220x150.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="خطای سرور داخلی Character AI 500: چگونه آن را برطرف کنیم" title="خطای سرور داخلی Character AI 500: چگونه آن را برطرف کنیم" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/character-ai-500-internal-server-error-how-to-fix/">خطای سرور داخلی Character AI 500: چگونه آن را برطرف کنیم</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2023-05-01</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="4 روش برای رفع آن در آیفون با iOS 17" href="https://nabfollower.com/blog/iphone-is-too-close-issue-4-ways-to-fix/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2023/06/4-روش-برای-رفع-آن-در-آیفون-با-iOS-17-220x150.png" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="4 روش برای رفع آن در آیفون با iOS 17" title="4 روش برای رفع آن در آیفون با iOS 17" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/iphone-is-too-close-issue-4-ways-to-fix/">4 روش برای رفع آن در آیفون با iOS 17</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2023-06-17</span>		</div>
	</div>
</li>
												</ul>
											</div><!-- .tab-content#popular-posts-tab /-->

										
											<div id="widget_tabs-1-recent" class="tab-content tab-content-recent">
												<ul class="tab-content-elements">
													
<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="نسخه ی نمایشی نوار ماکت AI توضیح داد" href="https://nabfollower.com/blog/ai-mocktail-bar-demo-explained-41ok/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/نسخه-ی-نمایشی-نوار-ماکت-AI-توضیح-داد-220x150.png" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="نسخه ی نمایشی نوار ماکت AI توضیح داد" title="نسخه ی نمایشی نوار ماکت AI توضیح داد" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/ai-mocktail-bar-demo-explained-41ok/">نسخه ی نمایشی نوار ماکت AI توضیح داد</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">3 هفته پیش</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="نماد مخفی Alolan Dugtrio Pokemon TCG Pocket به شانس زیادی نیاز دارد" href="https://nabfollower.com/blog/pokemon-tcg-pocket-alolan-dugtrio-secret-emblem-is-going-to-be-impossible/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/نماد-مخفی-Alolan-Dugtrio-Pokemon-TCG-Pocket-به-شانس-زیادی-220x150.png" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="نماد مخفی Alolan Dugtrio Pokemon TCG Pocket به شانس زیادی نیاز دارد" title="نماد مخفی Alolan Dugtrio Pokemon TCG Pocket به شانس زیادی نیاز دارد" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/pokemon-tcg-pocket-alolan-dugtrio-secret-emblem-is-going-to-be-impossible/">نماد مخفی Alolan Dugtrio Pokemon TCG Pocket به شانس زیادی نیاز دارد</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">3 هفته پیش</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="گره سفارشی N8N خود را ایجاد کنید" href="https://nabfollower.com/blog/%da%af%d8%b1%d9%87-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-n8n-%d8%ae%d9%88%d8%af-%d8%b1%d8%a7-%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%da%a9%d9%86%db%8c%d8%af/" class="post-thumb"><img post-id="111693" fifu-featured="1" width="220" height="150" src="https://i0.wp.com/media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2o75dodq8ke5lr0j14jn.png?w=220&resize=220,150&ssl=1" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="گره سفارشی N8N خود را ایجاد کنید" title="گره سفارشی N8N خود را ایجاد کنید" title="گره سفارشی N8N خود را ایجاد کنید" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/%da%af%d8%b1%d9%87-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-n8n-%d8%ae%d9%88%d8%af-%d8%b1%d8%a7-%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%da%a9%d9%86%db%8c%d8%af/">گره سفارشی N8N خود را ایجاد کنید</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">3 هفته پیش</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟" href="https://nabfollower.com/blog/why-cloud-native-devops-are-a-must-for-every-modern-company-52mb/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/چرا-Cloud-Native-DevOps-برای-هر-شرکت-مدرن-ضروری-220x150.png" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟" title="🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/why-cloud-native-devops-are-a-must-for-every-modern-company-52mb/">🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">3 هفته پیش</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="آیا Elden Ring Nightreign ارزش بازی را دارد؟" href="https://nabfollower.com/blog/is-elden-ring-nightreign-worth-it/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/آیا-Elden-Ring-Nightreign-ارزش-بازی-را-دارد؟-220x150.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="آیا Elden Ring Nightreign ارزش بازی را دارد؟" title="آیا Elden Ring Nightreign ارزش بازی را دارد؟" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/is-elden-ring-nightreign-worth-it/">آیا Elden Ring Nightreign ارزش بازی را دارد؟</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">3 هفته پیش</span>		</div>
	</div>
</li>
												</ul>
											</div><!-- .tab-content#recent-posts-tab /-->

										
											<div id="widget_tabs-1-comments" class="tab-content tab-content-comments">
												<ul class="tab-content-elements">
																									</ul>
											</div><!-- .tab-content#comments-tab /-->

										
							</div><!-- .tabs-wrapper-animated /-->
						</div><!-- .tabs-widget /-->
					</div><!-- .widget-container /-->
				</div><!-- .tabs-widget /-->
			</div><!-- .container-wrapper /-->
			<div id="posts-list-widget-3" class="container-wrapper widget posts-list"><div class="widget-title the-global-title"><div class="the-subtitle">آخرین های تکنولوژی<span class="widget-title-icon tie-icon"></span></div></div><div class="widget-posts-list-wrapper"><div class="widget-posts-list-container posts-list-circle" ><ul class="posts-list-items widget-posts-wrapper">
<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="هر آنچه شما باید بدانید" href="https://nabfollower.com/blog/%d9%87%d8%b1-%d8%a2%d9%86%da%86%d9%87-%d8%b4%d9%85%d8%a7-%d8%a8%d8%a7%db%8c%d8%af-%d8%a8%d8%af%d8%a7%d9%86%db%8c%d8%af/" class="post-thumb"><img post-id="110294" fifu-featured="1" width="150" height="150" src="https://i1.wp.com/blog.hootsuite.com/wp-content/uploads/2024/02/Organic-vs-paid-social-media.png?w=150&resize=150,150&ssl=1" class="attachment-thumbnail size-thumbnail wp-post-image" alt="هر آنچه شما باید بدانید" title="هر آنچه شما باید بدانید" title="هر آنچه شما باید بدانید" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/%d9%87%d8%b1-%d8%a2%d9%86%da%86%d9%87-%d8%b4%d9%85%d8%a7-%d8%a8%d8%a7%db%8c%d8%af-%d8%a8%d8%af%d8%a7%d9%86%db%8c%d8%af/">هر آنچه شما باید بدانید</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2025-05-24</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="راهنمای نهایی پوشش حلقه های اینستاگرام (+ الگوهای رایگان)" href="https://nabfollower.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%87%d8%a7%db%8c%db%8c-%d9%be%d9%88%d8%b4%d8%b4-%d8%ad%d9%84%d9%82%d9%87-%d9%87%d8%a7%db%8c-%d8%a7%db%8c%d9%86%d8%b3%d8%aa%d8%a7%da%af%d8%b1%d8%a7/" class="post-thumb"><img post-id="110292" fifu-featured="1" width="150" height="150" src="https://i0.wp.com/blog.hootsuite.com/wp-content/uploads/2024/02/instagram-reels.png?w=150&resize=150,150&ssl=1" class="attachment-thumbnail size-thumbnail wp-post-image" alt="راهنمای نهایی پوشش حلقه های اینستاگرام (+ الگوهای رایگان)" title="راهنمای نهایی پوشش حلقه های اینستاگرام (+ الگوهای رایگان)" title="راهنمای نهایی پوشش حلقه های اینستاگرام (+ الگوهای رایگان)" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%87%d8%a7%db%8c%db%8c-%d9%be%d9%88%d8%b4%d8%b4-%d8%ad%d9%84%d9%82%d9%87-%d9%87%d8%a7%db%8c-%d8%a7%db%8c%d9%86%d8%b3%d8%aa%d8%a7%da%af%d8%b1%d8%a7/">راهنمای نهایی پوشش حلقه های اینستاگرام (+ الگوهای رایگان)</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2025-05-24</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="20 سؤال مصاحبه مدیر رسانه های اجتماعی (+ پاسخ نمونه)" href="https://nabfollower.com/blog/20-%d8%b3%d8%a4%d8%a7%d9%84-%d9%85%d8%b5%d8%a7%d8%ad%d8%a8%d9%87-%d9%85%d8%af%db%8c%d8%b1-%d8%b1%d8%b3%d8%a7%d9%86%d9%87-%d9%87%d8%a7%db%8c-%d8%a7%d8%ac%d8%aa%d9%85%d8%a7%d8%b9%db%8c-%d9%be%d8%a7/" class="post-thumb"><img post-id="110254" fifu-featured="1" width="150" height="150" src="https://i2.wp.com/blog.hootsuite.com/wp-content/uploads/2024/08/social-media-manager-interview-questions.png?w=150&resize=150,150&ssl=1" class="attachment-thumbnail size-thumbnail wp-post-image" alt="20 سؤال مصاحبه مدیر رسانه های اجتماعی (+ پاسخ نمونه)" title="20 سؤال مصاحبه مدیر رسانه های اجتماعی (+ پاسخ نمونه)" title="20 سؤال مصاحبه مدیر رسانه های اجتماعی (+ پاسخ نمونه)" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/20-%d8%b3%d8%a4%d8%a7%d9%84-%d9%85%d8%b5%d8%a7%d8%ad%d8%a8%d9%87-%d9%85%d8%af%db%8c%d8%b1-%d8%b1%d8%b3%d8%a7%d9%86%d9%87-%d9%87%d8%a7%db%8c-%d8%a7%d8%ac%d8%aa%d9%85%d8%a7%d8%b9%db%8c-%d9%be%d8%a7/">20 سؤال مصاحبه مدیر رسانه های اجتماعی (+ پاسخ نمونه)</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2025-05-23</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="12 داشبورد رسانه های اجتماعی برای گزارش ، گوش دادن و موارد دیگر" href="https://nabfollower.com/blog/12-%d8%af%d8%a7%d8%b4%d8%a8%d9%88%d8%b1%d8%af-%d8%b1%d8%b3%d8%a7%d9%86%d9%87-%d9%87%d8%a7%db%8c-%d8%a7%d8%ac%d8%aa%d9%85%d8%a7%d8%b9%db%8c-%d8%a8%d8%b1%d8%a7%db%8c-%da%af%d8%b2%d8%a7%d8%b1%d8%b4/" class="post-thumb"><img post-id="108009" fifu-featured="1" width="150" height="150" src="https://i1.wp.com/blog.hootsuite.com/wp-content/uploads/2023/06/Social-media-dashboard.png?w=150&resize=150,150&ssl=1" class="attachment-thumbnail size-thumbnail wp-post-image" alt="12 داشبورد رسانه های اجتماعی برای گزارش ، گوش دادن و موارد دیگر" title="12 داشبورد رسانه های اجتماعی برای گزارش ، گوش دادن و موارد دیگر" title="12 داشبورد رسانه های اجتماعی برای گزارش ، گوش دادن و موارد دیگر" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/12-%d8%af%d8%a7%d8%b4%d8%a8%d9%88%d8%b1%d8%af-%d8%b1%d8%b3%d8%a7%d9%86%d9%87-%d9%87%d8%a7%db%8c-%d8%a7%d8%ac%d8%aa%d9%85%d8%a7%d8%b9%db%8c-%d8%a8%d8%b1%d8%a7%db%8c-%da%af%d8%b2%d8%a7%d8%b1%d8%b4/">12 داشبورد رسانه های اجتماعی برای گزارش ، گوش دادن و موارد دیگر</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2025-05-07</span>		</div>
	</div>
</li>
</ul></div></div><div class="clearfix"></div></div><!-- .widget /-->		</div><!-- .theiaStickySidebar /-->
	</aside><!-- .sidebar /-->
	</div><!-- .main-content-row /--></div><!-- #content /-->
<footer id="footer" class="site-footer dark-skin dark-widgetized-area">

	
			<div id="footer-widgets-container">
				<div class="container">
					
		<div class="footer-widget-area ">
			<div class="tie-row">

									<div class="tie-col-md-3 normal-side">
						<div id="posts-list-widget-1" class="container-wrapper widget posts-list"><div class="widget-title the-global-title"><div class="the-subtitle">پر بازدید ترین ها<span class="widget-title-icon tie-icon"></span></div></div><div class="widget-posts-list-wrapper"><div class="widget-posts-list-container timeline-widget" ><ul class="posts-list-items widget-posts-wrapper">					<li class="widget-single-post-item">
						<a href="https://nabfollower.com/blog/roblox-blox-fruits-codes/">
							<span class="date meta-item tie-icon">2023-04-10</span>							<h3>Blox Fruits Codes (آوریل 2023)</h3>
						</a>
					</li>
										<li class="widget-single-post-item">
						<a href="https://nabfollower.com/blog/litecoin-price-prediction-as-halving-event-approaches-can-ltc-100x-from-here-htm/">
							<span class="date meta-item tie-icon">2023-07-26</span>							<h3>پیش‌بینی قیمت لایت‌کوین به‌عنوان رویکردهای رویداد نصف‌کننده – آیا LTC می‌تواند از اینجا 100 برابر کند؟</h3>
						</a>
					</li>
										<li class="widget-single-post-item">
						<a href="https://nabfollower.com/blog/fifa-23-best-wingers/">
							<span class="date meta-item tie-icon">2023-02-19</span>							<h3>بهترین وینگرها در فیفا 23</h3>
						</a>
					</li>
					</ul></div></div><div class="clearfix"></div></div><!-- .widget /--><div id="categories-3" class="container-wrapper widget widget_categories"><div class="widget-title the-global-title"><div class="the-subtitle">دسته‌ها<span class="widget-title-icon tie-icon"></span></div></div>
			<ul>
					<li class="cat-item cat-item-1"><a href="https://nabfollower.com/blog/category/cryptocurrency/">ارز دیجیتال</a> (2,590)
</li>
	<li class="cat-item cat-item-352"><a href="https://nabfollower.com/blog/category/game/">بازی</a> (10,646)
</li>
	<li class="cat-item cat-item-339"><a href="https://nabfollower.com/blog/category/dev/">برنامه نویسی</a> (15,805)
</li>
	<li class="cat-item cat-item-174"><a href="https://nabfollower.com/blog/category/howto/">چه طور</a> (814)
</li>
	<li class="cat-item cat-item-202"><a href="https://nabfollower.com/blog/category/%d8%af%db%8c%d8%ac%db%8c%d8%aa%d8%a7%d9%84-%d9%85%d8%a7%d8%b1%da%a9%d8%aa%db%8c%d9%86%da%af/">دیجیتال مارکتینگ</a> (357)
</li>
	<li class="cat-item cat-item-177"><a href="https://nabfollower.com/blog/category/visa-guide/">راهنمای دریافت ویزا</a> (2)
</li>
	<li class="cat-item cat-item-26"><a href="https://nabfollower.com/blog/category/social/">شبکه های اجتماعی</a> (4,653)
</li>
			</ul>

			<div class="clearfix"></div></div><!-- .widget /-->					</div><!-- .tie-col /-->
				
									<div class="tie-col-md-3 normal-side">
						<div id="posts-list-widget-2" class="container-wrapper widget posts-list"><div class="widget-title the-global-title"><div class="the-subtitle">آخرین بروزرسانی ها<span class="widget-title-icon tie-icon"></span></div></div><div class="widget-posts-list-wrapper"><div class="widget-posts-list-container posts-pictures-widget" ><div class="tie-row widget-posts-wrapper">						<div class="widget-single-post-item tie-col-xs-4 tie-standard">
							
			<a aria-label="نسخه ی نمایشی نوار ماکت AI توضیح داد" href="https://nabfollower.com/blog/ai-mocktail-bar-demo-explained-41ok/" class="post-thumb"><img width="390" height="220" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/نسخه-ی-نمایشی-نوار-ماکت-AI-توضیح-داد-390x220.png" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="نسخه ی نمایشی نوار ماکت AI توضیح داد" title="نسخه ی نمایشی نوار ماکت AI توضیح داد" decoding="async" /></a>						</div>
												<div class="widget-single-post-item tie-col-xs-4 tie-standard">
							
			<a aria-label="نماد مخفی Alolan Dugtrio Pokemon TCG Pocket به شانس زیادی نیاز دارد" href="https://nabfollower.com/blog/pokemon-tcg-pocket-alolan-dugtrio-secret-emblem-is-going-to-be-impossible/" class="post-thumb"><img width="390" height="220" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/نماد-مخفی-Alolan-Dugtrio-Pokemon-TCG-Pocket-به-شانس-زیادی-390x220.png" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="نماد مخفی Alolan Dugtrio Pokemon TCG Pocket به شانس زیادی نیاز دارد" title="نماد مخفی Alolan Dugtrio Pokemon TCG Pocket به شانس زیادی نیاز دارد" decoding="async" /></a>						</div>
												<div class="widget-single-post-item tie-col-xs-4 tie-standard">
							
			<a aria-label="گره سفارشی N8N خود را ایجاد کنید" href="https://nabfollower.com/blog/%da%af%d8%b1%d9%87-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-n8n-%d8%ae%d9%88%d8%af-%d8%b1%d8%a7-%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%da%a9%d9%86%db%8c%d8%af/" class="post-thumb"><img post-id="111693" fifu-featured="1" width="390" height="220" src="https://i0.wp.com/media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2o75dodq8ke5lr0j14jn.png?w=390&resize=390,220&ssl=1" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="گره سفارشی N8N خود را ایجاد کنید" title="گره سفارشی N8N خود را ایجاد کنید" title="گره سفارشی N8N خود را ایجاد کنید" decoding="async" /></a>						</div>
												<div class="widget-single-post-item tie-col-xs-4 tie-standard">
							
			<a aria-label="🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟" href="https://nabfollower.com/blog/why-cloud-native-devops-are-a-must-for-every-modern-company-52mb/" class="post-thumb"><img width="390" height="220" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/چرا-Cloud-Native-DevOps-برای-هر-شرکت-مدرن-ضروری-390x220.png" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟" title="🚀 چرا Cloud Native & DevOps برای هر شرکت مدرن ضروری است؟" decoding="async" /></a>						</div>
												<div class="widget-single-post-item tie-col-xs-4 tie-standard">
							
			<a aria-label="آیا Elden Ring Nightreign ارزش بازی را دارد؟" href="https://nabfollower.com/blog/is-elden-ring-nightreign-worth-it/" class="post-thumb"><img width="390" height="220" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/آیا-Elden-Ring-Nightreign-ارزش-بازی-را-دارد؟-390x220.jpg" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="آیا Elden Ring Nightreign ارزش بازی را دارد؟" title="آیا Elden Ring Nightreign ارزش بازی را دارد؟" decoding="async" /></a>						</div>
												<div class="widget-single-post-item tie-col-xs-4 tie-standard">
							
			<a aria-label="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" href="https://nabfollower.com/blog/%d8%aa%d9%88%d8%b3%d8%b9%d9%87-harmonyos-xi-%d8%a7%d8%ac%d8%b1%d8%a7%db%8c-%d8%b5%d9%81%d8%ad%d9%87-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d8%b1%d8%b3%d8%a7%d9%84-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7/" class="post-thumb"><img post-id="111687" fifu-featured="1" width="390" height="220" src="https://i0.wp.com/media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3q7crmpwr4o24kxip1ia.jpg?w=390&resize=390,220&ssl=1" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" title="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" title="توسعه Harmonyos (XI): اجرای صفحه برای ارسال اطلاعات شغلی" decoding="async" /></a>						</div>
												<div class="widget-single-post-item tie-col-xs-4 tie-standard">
							
			<a aria-label="ملزومات QA" href="https://nabfollower.com/blog/qa-essentials-3e2e/" class="post-thumb"><img width="390" height="220" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/ملزومات-QA-390x220.png" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="ملزومات QA" title="ملزومات QA" decoding="async" /></a>						</div>
												<div class="widget-single-post-item tie-col-xs-4 tie-standard">
							
			<a aria-label="خودی به روزرسانی داستان Resident Evil 9 می دهد ، به آینده لئون اشاره می کند" href="https://nabfollower.com/blog/resident-evil-9-leon-kennedy-protagonist-conclusion-story-20-years-first-game/" class="post-thumb"><img width="390" height="220" src="https://nabfollower.com/blog/wp-content/uploads/2025/06/خودی-به-روزرسانی-داستان-Resident-Evil-9-می-دهد-،-390x220.jpg" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="خودی به روزرسانی داستان Resident Evil 9 می دهد ، به آینده لئون اشاره می کند" title="خودی به روزرسانی داستان Resident Evil 9 می دهد ، به آینده لئون اشاره می کند" decoding="async" /></a>						</div>
												<div class="widget-single-post-item tie-col-xs-4 tie-standard">
							
			<a aria-label="Refactoring 029 – NULL را با مجموعه جایگزین کنید" href="https://nabfollower.com/blog/refactoring-029-null-%d8%b1%d8%a7-%d8%a8%d8%a7-%d9%85%d8%ac%d9%85%d9%88%d8%b9%d9%87-%d8%ac%d8%a7%db%8c%da%af%d8%b2%db%8c%d9%86-%da%a9%d9%86%db%8c%d8%af/" class="post-thumb"><img post-id="111681" fifu-featured="1" width="390" height="220" src="https://i1.wp.com/media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzpomku3fo47g0z7rrmrm.jpg?w=390&resize=390,220&ssl=1" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="Refactoring 029 – NULL را با مجموعه جایگزین کنید" title="Refactoring 029 – NULL را با مجموعه جایگزین کنید" title="Refactoring 029 – NULL را با مجموعه جایگزین کنید" decoding="async" /></a>						</div>
						</div></div></div><div class="clearfix"></div></div><!-- .widget /-->					</div><!-- .tie-col /-->
				
									<div class="tie-col-md-3 normal-side">
											</div><!-- .tie-col /-->
				
				
			</div><!-- .tie-row /-->
		</div><!-- .footer-widget-area /-->

		
		<div class="footer-widget-area ">
			<div class="tie-row">

				
				
									<div class="tie-col-sm-4 normal-side">
						<div id="tie-newsletter-1" class="container-wrapper widget subscribe-widget">
			<div class="widget-inner-wrap">

										<div id="mc_embed_signup-tie-newsletter-1">
							<form action="#" method="post" id="mc-embedded-subscribe-form-tie-newsletter-1" name="mc-embedded-subscribe-form" class="subscribe-form validate" target="_blank" novalidate>
									<div class="mc-field-group">
										<label class="screen-reader-text" for="mce-EMAIL-tie-newsletter-1">آدرس ایمیل خود را وارد کنید</label>
										<input type="email" value="" id="mce-EMAIL-tie-newsletter-1" placeholder="آدرس ایمیل خود را وارد کنید" name="EMAIL" class="subscribe-input required email">
									</div>
																		<input type="submit" value="مشترک شوید" name="subscribe" class="button subscribe-submit">
							</form>
						</div>
						
			</div><!-- .widget-inner-wrap /-->

			<div class="clearfix"></div></div><!-- .widget /-->					</div><!-- .tie-col /-->
				
				
			</div><!-- .tie-row /-->
		</div><!-- .footer-widget-area /-->

						</div><!-- .container /-->
			</div><!-- #Footer-widgets-container /-->
			
			<div id="site-info" class="site-info site-info-layout-2">
				<div class="container">
					<div class="tie-row">
						<div class="tie-col-md-12">

							<div class="copyright-text copyright-text-first">تمامی حقوق برای این سایت محفوظ است.</div><div class="footer-menu"><ul id="menu-tielabs-secondry-menu" class="menu"><li id="menu-item-1014" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-1014"><a href="https://nabfollower.com/blog/">آموزش جامع شبکه های اجتماعی</a></li>
<li id="menu-item-1030" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-1030"><a href="https://nabfollower.com/blog/category/cryptocurrency/">ارز دیجیتال</a></li>
<li id="menu-item-1031" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-1031"><a href="https://nabfollower.com/blog/category/social/">شبکه های اجتماعی</a></li>
</ul></div><ul class="social-icons"><li class="social-icons-item"><a class="social-link facebook-social-icon" rel="external noopener nofollow" target="_blank" href="https://www.facebook.com/nabfollower.real"><span class="tie-social-icon tie-icon-facebook"></span><span class="screen-reader-text">فیس بوک</span></a></li><li class="social-icons-item"><a class="social-link twitter-social-icon" rel="external noopener nofollow" target="_blank" href="https://twitter.com/nabfollower"><span class="tie-social-icon tie-icon-twitter"></span><span class="screen-reader-text">توییتر (X)</span></a></li><li class="social-icons-item"><a class="social-link pinterest-social-icon" rel="external noopener nofollow" target="_blank" href="https://www.pinterest.de/nabfollower/"><span class="tie-social-icon tie-icon-pinterest"></span><span class="screen-reader-text">‫پین‌ترست</span></a></li><li class="social-icons-item"><a class="social-link youtube-social-icon" rel="external noopener nofollow" target="_blank" href="https://youtube.com/channel/UCN2r-A3LGEuqbjJrMA0ASJw"><span class="tie-social-icon tie-icon-youtube"></span><span class="screen-reader-text">یوتیوب</span></a></li><li class="social-icons-item"><a class="social-link instagram-social-icon" rel="external noopener nofollow" target="_blank" href="https://www.instagram.com/nabfollower_com/?hl=en"><span class="tie-social-icon tie-icon-instagram"></span><span class="screen-reader-text">اینستاگرام</span></a></li><li class="social-icons-item"><a class="social-link telegram-social-icon" rel="external noopener nofollow" target="_blank" href="https://t.me/Nabfollower"><span class="tie-social-icon tie-icon-paper-plane"></span><span class="screen-reader-text">تلگرام</span></a></li></ul> 

						</div><!-- .tie-col /-->
					</div><!-- .tie-row /-->
				</div><!-- .container /-->
			</div><!-- #site-info /-->
			
</footer><!-- #footer /-->




		<div id="share-buttons-mobile" class="share-buttons share-buttons-mobile">
			<div class="share-links  icons-only">
				
				<a href="https://www.facebook.com/sharer.php?u=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="فیس بوک" target="_blank" class="facebook-share-btn " data-raw="https://www.facebook.com/sharer.php?u={post_link}">
					<span class="share-btn-icon tie-icon-facebook"></span> <span class="screen-reader-text">فیس بوک</span>
				</a>
				<a href="https://twitter.com/intent/tweet?text=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue&url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="توییتر (X)" target="_blank" class="twitter-share-btn " data-raw="https://twitter.com/intent/tweet?text={post_title}&url={post_link}">
					<span class="share-btn-icon tie-icon-twitter"></span> <span class="screen-reader-text">توییتر (X)</span>
				</a>
				<a href="https://api.whatsapp.com/send?text=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue%20https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="واتس آپ" target="_blank" class="whatsapp-share-btn " data-raw="https://api.whatsapp.com/send?text={post_title}%20{post_link}">
					<span class="share-btn-icon tie-icon-whatsapp"></span> <span class="screen-reader-text">واتس آپ</span>
				</a>
				<a href="https://telegram.me/share/url?url=https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/&text=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue" rel="external noopener nofollow" title="تلگرام" target="_blank" class="telegram-share-btn " data-raw="https://telegram.me/share/url?url={post_link}&text={post_title}">
					<span class="share-btn-icon tie-icon-paper-plane"></span> <span class="screen-reader-text">تلگرام</span>
				</a>
				<a href="viber://forward?text=%D8%B3%D8%A7%D8%AE%D8%AA%20%DB%8C%DA%A9%20%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%20%DA%86%D8%AA%20%D8%A8%D9%84%D8%A7%D8%AF%D8%B1%D9%86%DA%AF%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20Laravel%20Reverb%20%D9%88%20Vue%20https://nabfollower.com/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/" rel="external noopener nofollow" title="وایبر" target="_blank" class="viber-share-btn " data-raw="viber://forward?text={post_title}%20{post_link}">
					<span class="share-btn-icon tie-icon-phone"></span> <span class="screen-reader-text">وایبر</span>
				</a>			</div><!-- .share-links /-->
		</div><!-- .share-buttons /-->

		<div class="mobile-share-buttons-spacer"></div>
		<a id="go-to-top" class="go-to-top-button" href="#go-to-tie-body">
			<span class="tie-icon-angle-up"></span>
			<span class="screen-reader-text">دکمه بازگشت به بالا</span>
		</a>
	
		</div><!-- #tie-wrapper /-->

		
	<aside class=" side-aside normal-side dark-skin dark-widgetized-area slide-sidebar-desktop" aria-label="موقعیت سایدبار دوم" style="visibility: hidden;">
		<div data-height="100%" class="side-aside-wrapper has-custom-scroll">

			<a href="#" class="close-side-aside remove big-btn">
				<span class="screen-reader-text">بستن</span>
			</a><!-- .close-side-aside /-->


			

							<div id="slide-sidebar-widgets">
					<div id="posts-list-widget-4" class="container-wrapper widget posts-list"><div class="widget-title the-global-title"><div class="the-subtitle">محبوب ترین ها<span class="widget-title-icon tie-icon"></span></div></div><div class="widget-posts-list-wrapper"><div class="widget-posts-list-container posts-list-big-first has-first-big-post" ><ul class="posts-list-items widget-posts-wrapper">
<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="Blox Fruits Codes (آوریل 2023)" href="https://nabfollower.com/blog/roblox-blox-fruits-codes/" class="post-thumb"><span class="post-cat-wrap"><span class="post-cat tie-cat-352">بازی</span></span><img width="390" height="220" src="https://nabfollower.com/blog/wp-content/uploads/2023/04/Blox-Fruits-Codes-آوریل-2023-390x220.jpg" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="Blox Fruits Codes (آوریل 2023)" title="Blox Fruits Codes (آوریل 2023)" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/roblox-blox-fruits-codes/">Blox Fruits Codes (آوریل 2023)</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2023-04-10</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="پیش‌بینی قیمت لایت‌کوین به‌عنوان رویکردهای رویداد نصف‌کننده – آیا LTC می‌تواند از اینجا 100 برابر کند؟" href="https://nabfollower.com/blog/litecoin-price-prediction-as-halving-event-approaches-can-ltc-100x-from-here-htm/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2023/07/1690317209_پیش‌بینی-قیمت-لایت‌کوین-به‌عنوان-رویکردهای-رویداد-نصف‌کننده-–-آیا-LTC-220x150.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="پیش‌بینی قیمت لایت‌کوین به‌عنوان رویکردهای رویداد نصف‌کننده – آیا LTC می‌تواند از اینجا 100 برابر کند؟" title="پیش‌بینی قیمت لایت‌کوین به‌عنوان رویکردهای رویداد نصف‌کننده – آیا LTC می‌تواند از اینجا 100 برابر کند؟" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/litecoin-price-prediction-as-halving-event-approaches-can-ltc-100x-from-here-htm/">پیش‌بینی قیمت لایت‌کوین به‌عنوان رویکردهای رویداد نصف‌کننده – آیا LTC می‌تواند از اینجا 100 برابر کند؟</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2023-07-26</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="بهترین وینگرها در فیفا 23" href="https://nabfollower.com/blog/fifa-23-best-wingers/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2023/02/1676808128_بهترین-وینگرها-در-فیفا-23-220x150.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="بهترین وینگرها در فیفا 23" title="بهترین وینگرها در فیفا 23" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/fifa-23-best-wingers/">بهترین وینگرها در فیفا 23</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2023-02-19</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="خطای سرور داخلی Character AI 500: چگونه آن را برطرف کنیم" href="https://nabfollower.com/blog/character-ai-500-internal-server-error-how-to-fix/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2023/05/سرور-داخلی-Character-AI-500-چگونه-آن-را-برطرف-220x150.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="خطای سرور داخلی Character AI 500: چگونه آن را برطرف کنیم" title="خطای سرور داخلی Character AI 500: چگونه آن را برطرف کنیم" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/character-ai-500-internal-server-error-how-to-fix/">خطای سرور داخلی Character AI 500: چگونه آن را برطرف کنیم</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2023-05-01</span>		</div>
	</div>
</li>

<li class="widget-single-post-item widget-post-list tie-standard">

			<div class="post-widget-thumbnail">

			
			<a aria-label="4 روش برای رفع آن در آیفون با iOS 17" href="https://nabfollower.com/blog/iphone-is-too-close-issue-4-ways-to-fix/" class="post-thumb"><img width="220" height="150" src="https://nabfollower.com/blog/wp-content/uploads/2023/06/4-روش-برای-رفع-آن-در-آیفون-با-iOS-17-220x150.png" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="4 روش برای رفع آن در آیفون با iOS 17" title="4 روش برای رفع آن در آیفون با iOS 17" decoding="async" /></a>		</div><!-- post-alignleft /-->
	
	<div class="post-widget-body ">
		<a class="post-title the-subtitle" href="https://nabfollower.com/blog/iphone-is-too-close-issue-4-ways-to-fix/">4 روش برای رفع آن در آیفون با iOS 17</a>

		<div class="post-meta">
			<span class="date meta-item tie-icon">2023-06-17</span>		</div>
	</div>
</li>
</ul></div></div><div class="clearfix"></div></div><!-- .widget /--><div id="posts-list-widget-5" class="container-wrapper widget posts-list"><div class="widget-title the-global-title"><div class="the-subtitle">بیشترین دیدگاه ها<span class="widget-title-icon tie-icon"></span></div></div><div class="widget-posts-list-wrapper"><div class="widget-posts-list-container timeline-widget" ><ul class="posts-list-items widget-posts-wrapper">					<li class="widget-single-post-item">
						<a href="https://nabfollower.com/blog/ai-mocktail-bar-demo-explained-41ok/">
							<span class="date meta-item tie-icon">3 هفته پیش</span>							<h3>نسخه ی نمایشی نوار ماکت AI توضیح داد</h3>
						</a>
					</li>
										<li class="widget-single-post-item">
						<a href="https://nabfollower.com/blog/softbank-215-%d9%85%db%8c%d9%84%db%8c%d9%88%d9%86-%d8%af%d9%84%d8%a7%d8%b1-%d8%a7%d8%b2-%d8%b3%d9%87%d8%a7%d9%85-paytm-%d9%87%d9%86%d8%af-%d8%b1%d8%a7-%d9%85%db%8c-%d9%81%d8%b1%d9%88%d8%b4%d8%af/">
							<span class="date meta-item tie-icon">2022-11-17</span>							<h3>SoftBank 215 میلیون دلار از سهام Paytm هند را می فروشد: گزارش</h3>
						</a>
					</li>
										<li class="widget-single-post-item">
						<a href="https://nabfollower.com/blog/%da%86%da%af%d9%88%d9%86%d9%87-%d8%ae%d8%a7%da%a9-%d8%a7%d8%b1%d9%87-%d8%b1%d8%a7-%d9%82%d8%a8%d9%84-%d8%a7%d8%b2-%d8%b1%d9%86%da%af-%d8%a2%d9%85%db%8c%d8%b2%db%8c-%da%86%d9%88%d8%a8-%d8%aa%d9%85/">
							<span class="date meta-item tie-icon">2022-11-17</span>							<h3>چگونه خاک اره را قبل از رنگ آمیزی چوب تمیز کنیم؟ [Solved] 2022</h3>
						</a>
					</li>
										<li class="widget-single-post-item">
						<a href="https://nabfollower.com/blog/%d8%b3%d9%82%d9%88%d8%b7-ftx-%d8%a8%d9%87-%d9%88%d8%a7%d9%85-%d8%af%d9%87%d9%86%d8%af%d9%87-%da%a9%d8%b1%db%8c%d9%be%d8%aa%d9%88-genesis-%d8%b1%d8%b3%db%8c%d8%af-bankman-fried%d8%8c-%d8%a7%d9%81/">
							<span class="date meta-item tie-icon">2022-11-17</span>							<h3>سقوط FTX به وام دهنده کریپتو Genesis رسید.  Bankman-Fried، افراد مشهور شکایت کردند</h3>
						</a>
					</li>
										<li class="widget-single-post-item">
						<a href="https://nabfollower.com/blog/%d8%aa%d8%a7%db%8c%d9%88%d8%a7%d9%86-%d8%a8%d9%87-%d8%af%d9%86%d8%a8%d8%a7%d9%84-%d9%85%d8%b9%d8%a7%d9%81%db%8c%d8%aa-%d9%87%d8%a7%db%8c-%d9%85%d8%a7%d9%84%db%8c%d8%a7%d8%aa%db%8c-%d8%a8%d8%b2%d8%b1/">
							<span class="date meta-item tie-icon">2022-11-17</span>							<h3>تایوان به دنبال معافیت های مالیاتی بزرگ تری برای تحقیق و توسعه فناوری است تا بتواند مزیت رقابتی خود را حفظ کند</h3>
						</a>
					</li>
										<li class="widget-single-post-item">
						<a href="https://nabfollower.com/blog/%da%86%da%af%d9%88%d9%86%d9%87-%d9%be%db%8c%d8%a7%d9%85-%d8%a7%d8%b1%d8%b3%d8%a7%d9%84%db%8c-%d8%af%d8%b1-%d8%a7%db%8c%d9%86%d8%b3%d8%aa%d8%a7%da%af%d8%b1%d8%a7%d9%85-%d8%b1%d8%a7-%d8%ad%d8%b0%d9%81/">
							<span class="date meta-item tie-icon">2022-11-17</span>							<h3>چگونه پیام ارسالی در اینستاگرام را حذف کنیم؟ [Solved] 2022</h3>
						</a>
					</li>
					</ul></div></div><div class="clearfix"></div></div><!-- .widget /--><div id="comments_avatar-widget-1" class="container-wrapper widget recent-comments-widget"><div class="widget-title the-global-title"><div class="the-subtitle">آخرین دیدگاه ها<span class="widget-title-icon tie-icon"></span></div></div><ul></ul><div class="clearfix"></div></div><!-- .widget /-->				</div>
			
		</div><!-- .side-aside-wrapper /-->
	</aside><!-- .side-aside /-->

	
	</div><!-- #tie-container /-->
</div><!-- .background-overlay /-->

<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/blog\/*"},{"not":{"href_matches":["\/blog\/wp-*.php","\/blog\/wp-admin\/*","\/blog\/wp-content\/uploads\/*","\/blog\/wp-content\/*","\/blog\/wp-content\/plugins\/*","\/blog\/wp-content\/themes\/jannah\/*","\/blog\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<div id="reading-position-indicator"></div><div id="autocomplete-suggestions" class="autocomplete-suggestions"></div><div id="is-scroller-outer"><div id="is-scroller"></div></div><div id="fb-root"></div>	<div id="tie-popup-login" class="tie-popup" style="display: none;">
		<a href="#" class="tie-btn-close remove big-btn light-btn">
			<span class="screen-reader-text">بستن</span>
		</a>
		<div class="tie-popup-container">
			<div class="container-wrapper">
				<div class="widget login-widget">

					<div class="widget-title the-global-title">
						<div class="the-subtitle">ورود <span class="widget-title-icon tie-icon"></span></div>
					</div>

					<div class="widget-container">
						
	<div class="login-form">

		<form name="registerform" action="https://nabfollower.com/blog/wp-login.php" method="post">
			<input type="text" name="log" title="اسم کاربری" placeholder="اسم کاربری">
			<div class="pass-container">
				<input type="password" name="pwd" title="رمز عبور" placeholder="رمز عبور">
				<a class="forget-text" href="https://nabfollower.com/blog/wp-login.php?action=lostpassword&redirect_to=https%3A%2F%2Fnabfollower.com%2Fblog">رمز عبور را فراموش کرده اید؟</a>
			</div>

			<input type="hidden" name="redirect_to" value="/blog/building-a-real-time-chat-app-using-laravel-reverb-and-vue-cfe/"/>
			<label for="rememberme" class="rememberme">
				<input id="rememberme" name="rememberme" type="checkbox" checked="checked" value="forever" /> مرا به خاطر بسپار			</label>

			
			
			<button type="submit" class="button fullwidth login-submit">ورود</button>

					</form>

		
	</div>
						</div><!-- .widget-container  /-->
				</div><!-- .login-widget  /-->
			</div><!-- .container-wrapper  /-->
		</div><!-- .tie-popup-container /-->
	</div><!-- .tie-popup /-->
	<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30","add_request_uri":"","add_self_reference_link":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js?ver=2.0.74" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js?ver=2.2.1" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js?ver=1.9.2" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>","chamomile_theme_is_on":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js?ver=2.0.74-1746495228" id="ez-toc-js-js"></script>
<script type="text/javascript" id="tie-scripts-js-extra">
/* <![CDATA[ */
var tie = {"is_rtl":"1","ajaxurl":"https:\/\/nabfollower.com\/blog\/wp-admin\/admin-ajax.php","is_side_aside_light":"","is_taqyeem_active":"1","is_sticky_video":"1","mobile_menu_top":"","mobile_menu_active":"","mobile_menu_parent":"","lightbox_all":"true","lightbox_gallery":"true","lightbox_skin":"dark","lightbox_thumb":"horizontal","lightbox_arrows":"true","is_singular":"1","autoload_posts":"","reading_indicator":"true","lazyload":"","select_share":"true","select_share_twitter":"true","select_share_facebook":"true","select_share_linkedin":"true","select_share_email":"","facebook_app_id":"5303202981","twitter_username":"","responsive_tables":"true","ad_blocker_detector":"","sticky_behavior":"upwards","sticky_desktop":"true","sticky_mobile":"true","sticky_mobile_behavior":"default","ajax_loader":"<div class=\"loader-overlay\"><div class=\"spinner-circle\"><\/div><\/div>","type_to_search":"1","lang_no_results":"\u0686\u06cc\u0632\u06cc \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f","sticky_share_mobile":"true","sticky_share_post":"","sticky_share_post_menu":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/themes/jannah/assets/js/scripts.min.js?ver=7.2.0" id="tie-scripts-js"></script>
<script type="text/javascript" id="tie-scripts-js-after">
/* <![CDATA[ */
				jQuery.ajax({
					type : "GET",
					url  : "https://nabfollower.com/blog/wp-admin/admin-ajax.php",
					data : "postviews_id=83549&action=tie_postviews",
					cache: !1,
					success: function( data ){
						jQuery(".single-post-meta").find(".meta-views").html( data );
					}
				});

			
/* ]]> */
</script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/themes/jannah/assets/ilightbox/lightbox.js?ver=7.2.0" id="tie-js-ilightbox-js"></script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/themes/jannah/assets/js/sliders.min.js?ver=7.2.0" id="tie-js-sliders-js"></script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/themes/jannah/assets/js/shortcodes.js?ver=7.2.0" id="tie-js-shortcodes-js"></script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/themes/jannah/assets/js/desktop.min.js?ver=7.2.0" id="tie-js-desktop-js"></script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/themes/jannah/assets/js/live-search.js?ver=7.2.0" id="tie-js-livesearch-js"></script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/themes/jannah/assets/js/single.min.js?ver=7.2.0" id="tie-js-single-js"></script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-includes/js/comment-reply.min.js?ver=6.8.1" id="comment-reply-js" async="async" data-wp-strategy="async"></script>
<script type="text/javascript" src="https://nabfollower.com/blog/wp-content/themes/jannah/assets/js/br-news.js?ver=7.2.0" id="tie-js-breaking-js"></script>

</body>
</html>