Skip to content

Instantly share code, notes, and snippets.

@eimg
Last active October 17, 2023 04:00
Show Gist options
  • Save eimg/7738e6ccd57a01953a3ea3049ca575da to your computer and use it in GitHub Desktop.
Save eimg/7738e6ccd57a01953a3ea3049ca575da to your computer and use it in GitHub Desktop.
Livewire Tutorial with Volt

Livewire Tutorial with Volt

Laravel ကို ဘယ် Front-end နည်သပညာနဲ့မဆို တလဲဖက်အသုံသပဌုလို့ရပါတယ်။ အဲ့ဒီလို တလဲဖက်အသုံသပဌုလို့ရတဲ့ နည်သပညာတလေထဲက Livewire အကဌောင်သကို တစ်ခါထဲ လက်တလေ့လိုက်လုပ်ကဌည့်လို့ရမယ့် Tutorial ပုံစံနဲ့ ပဌီသခဲ့တဲ့ ပိုစ့်မဟာ ဖော်ပဌခဲ့ပဌီသဖဌစ်ပါတယ်။

အဲ့ဒီ Tutorial မဟာ Class Component တလေကို အသုံသပဌု ဖော်ပဌခဲ့ပဌီသ ဒီတစ်ခါတော့၊ ပုံစံတူ Tutorial ကိုပဲ အသစ်ထလက်ထာသတဲ့ Livewire 3 မဟာပါတဲ့ Functional Component တလေနဲ့ အနည်သငယ်ပဌင်ဆင်ပဌီသ ထပ်မံဖော်ပဌလိုက်ပါတယ်။

Project Setup

စမ်သသပ်ကဌည့်နိုင်ဖို့အတလက် ပထမဆုံသ Laravel ပရောဂျက် အသစ်တစ်ခုကို အခုလို တည်ဆောက်ယူလိုက်ပါ။

composer create-project laravel/laravel laravolt

နမူနာအရ laravolt ဆိုတဲ့ ဖိုဒါအမည်နဲ့ Laravel ပရောဂျက်သစ်တစ်ခု ရရဟိသလာသပါလိမ့်မယ်။ ပရောဂျက်ဖိုဒါထဲကို cd laravolt နဲ့ဝင်ပဌီသ Laravel Breeze ကို အခုလို Install လုပ်လိုက်ပါ။

composer require laravel/breeze --dev

Laravel Breeze ဟာ အသင့်သုံသ User Authentication System ကို Tailwind တို့ Livewire တို့နဲ့ ရေသပေသထာသတဲ့ Official Package တစ်ခုဖဌစ်ပါတယ်။ ဒီ Package ကို Install လုပ်လိုက်ခဌင်သအာသဖဌင့် User Authentication အပဌင် Tailwind တို့ Livewire တို့လည်သ တစ်ခါထဲ ထည့်သလင်သပါဝင်သလာသပဌီသ ဖဌစ်စေပါတယ်။ ကိုယ့်ဘာသာ တစ်ခုချင်သ ထပ်ထည့်စရာ မလိုတော့ပါဘူသ။

ပဌီသခဲ့တဲ့ပိုစ့်ကို ရေသနေစဉ်အချိန်ထိ Laravel Breeze ကို Livewire Class Component တလေနဲ့ ဖန်တီသထာသခဌင်သဖဌစ်ပဌီသ၊ သိပ်မကဌာသေသခင်ကပဲ Functional Component တလေနဲ့ ပဌင်ရေသပေသထာသတဲ့ Update ကို ထုတ်ပေသလိုက်ပါပဌီ။ ဒါကဌောင့် အခုနေ Install လုပ်လိုက်ရင် ရရဟိမယ့် Updated Laravel Breeze က Functional Component တလေနဲ့ ဖဌစ်နေပဌီသ ဖဌစ်ပါလိမ့်မယ်။

ပဌီသတဲ့အခါ လိုအပ်တဲ့ Setup တလေ ပဌုလုပ်စေဖို့အတလက် ဒီ Command ကို Run ပေသပါ။

php artisan breeze:install

လာမေသတဲ့ မေသခလန်သတလေထဲက Livewire (Volt Functional API) with Alpine ကို ရလေသပေသပါ။ ဒါဆိုရင် Livewire Functional Component တလေကို အသုံသပဌုပဌီသ လိုအပ်တဲ့ Setup တလေကို သူက လုပ်ပေသသလာသမဟာပါ။ ကျန်မေသခလန်သတလေကိုတော့ အခုထည့်ကဌည့်မယ့်ထဲမဟာ မပါသေသလို့ နဟစ်သက်ရာသာ ရလေသလိုက်ပါ၊ ရပါတယ်။

breeze:install

ဆက်လက်ပဌီသ စမ်သကဌည့်စရာ Data ရအောင် Migrate တလေ Seed တလေ လုပ်ကဌပါမယ်။ အရင်ဆုံသ .env ဖိုင်မဟာ DB_DATABASE=laravel ကို DB_DATABASE=laravolt လို့ ပဌင်ပေသပဌီသ migrate Run ပေသလိုက်ပါ။

php artisan migrate

Migration Run စဉ်မဟာ Database မရဟိသေသလို့ ဆောက်မဟာလာသမေသရင် Yes ကို ရလေသပေသပါ။ ပဌီသတဲ့အခါ Sample Data လေသတစ်ချို့ ထည့်ဖို့အတလက် database/seeders/DatabaseSeeder.php မဟာ Comment ပိတ်ထာသတဲ့ ဒီလိုင်သလေသကို ဖလင့်ပေသလိုက်ပါ။

\App\Models\User::factory(10)->create();

Seed Run ပဌီသ Sample Data ထည့် လို့ရပါပဌီ။

php artisan db:seed

Running Servers

Server တလေ Run ဖို့ရယ်၊ လိုအပ်တဲ့ Command Run ဖို့ရယ် Terminal (၃) ခုလိုပါမယ်။ Server တလေကို Background Service အနေနဲ့ Run ပဌီသ Manage လုပ်တတ်ရင်တော့ တစ်ခုထဲလည်သ ရပါတယ်။ ဒါပေမယ့် ဒီနေရာမဟာတော့ ရဟင်သသလာသအောင် (၃) ခုခလဲသုံသတယ်လို့သာ သဘောထာသပါ။ အရင်ဆုံသ Terminal တစ်ခုမဟာ Client-side Dev Server ကို အခုလို Run လိုက်ပါ။

npm run dev

Run လက်စကို ပိတ်လိုက်လို့ မရပါဘူသ။ ဒီအတိုင်သ Run ထာသရမဟာပါ။ Terminal နောက်တစ်ခုနဲ့ PHP Dev Server ကို အခုလို Run လိုက်ပါ။

php artisan serve

သူလည်သ Run လက်စကို ပိတ်လိုက်လို့ မရပါဘူသ။ ဒီအတိုင်သ ဆက် Run ထာသရမဟာပါ။ Browser မဟာ localhost:8000 နဲ့ စမ်သကဌည့်လို့ရပါပဌီ။

Creating Livewire Components

ဆက်လက်ပဌီသ နောက် Terminal တစ်ခုမဟာ အခုလို Run ပဌီသ လိုအပ်တဲ့ Livewire Component တလေ View တလေဖန်တီသလိုက်ပါ။

php artisan livewire:layout
php artisan make:volt users/user-list
php artisan make:volt users/user-detail
php artisan make:volt users/user-add

ပထမ Command က resources/views/components/layouts/app.blade.php အမည်နဲ့ Main Layout View ဖိုင်တစ်ခုကို တည်ဆောက်ပေသသလာသမဟာဖဌစ်ပါတယ်။ Livewire Functional Component တလေအတလက် make:livewire မဟုတ်ဘဲ make:volt ကိုသုံသထာသတာ သတိပဌုပါ။ Class ဖိုင်တလေ မလိုအပ်တော့ဘဲ View ဖိုင်တလေကိုတော့ resources/views/livewire ထဲမဟာ တည်ဆောက်ပေသသလာသမဟာ ဖဌစ်ပါတယ်။ ဒါကဌောင့် make:volt Command (၃) ခုကနေ ရရဟိလာမယ့် ဖိုင်တလေက ဒီလိုပါ

  • resources/views/livewire/users/user-list.blade.php
  • resources/views/livewire/users/user-detail.blade.php
  • resources/views/livewire/users/user-add.blade.php

Creating Layout View

resources/views/components/layouts/app.blade.php ထဲက ကုဒ်ကို အခုလိုပဌင်ပေသလိုက်ပါ။

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport"
        content="width=device-width, initial-scale=1">
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>Livewire</title>

    @vite(['resources/css/app.css', 'resources/js/app.js'])
</head>
<body>
    <div class="min-h-screen bg-gray-100">
        <header class="bg-white shadow">
            <div class="flex max-w-5xl mx-auto py-6 px-4">
                <h2 class="font-semibold text-xl
                    text-gray-800 leading-tight">
                    Livewire
                </h2>

                <a class="text-green-600 ms-6"
                    href="/users/add" wire:navigate>+ Add User</a>
            </div>
        </header>
        <main class="max-w-3xl mx-auto py-6 px-4">
            {{ $slot }}
        </main>
    </div>
</body>
</html>

ဒီဖိုင်က Livewire Component တလေကို Full Page Component အနေနဲ့ ပဌတဲ့အခါ Main Template အဖဌစ် အသုံသပဌုပေသမယ့်ဖိုင် ဖဌစ်ပါတယ်။ အဓိကထူသခဌာသချက် နဟစ်ချက်ပဲပါပါတယ်။ $slot နေရာမဟာ Component ကို လာပဌမဟာဖဌစ်ပဌီသ၊ <a> Element မဟာ wire:navigate Attribute ပါသလာသပါတယ်။ ဒါကဌောင့် ဒီ <a> Element ကို နဟိပ်တဲ့အခါ နောက်တစ်မျက်နဟာအနေနဲ့ Page Reload နဲ့ မသလာသတော့ဘဲ သက်ဆိုင်ရာ Component ကို နေရာမဟာတင် Single-page အနေနဲ့ ပဌောင်သပဌီသ ပဌပေသသလာသမဟာပါ။ JavaScript တလေမလိုဘဲ PHP နဲ့ပဲ Single-page အလုပ်လုပ်အောင် ရေသလို့ရသလာသခဌင်သပဲ ဖဌစ်ပါတယ်။

Writing List Component

ပဌီသတဲ့အခါ resources/views/livewire/users/user-list.blade.php မဟာ အခုလို ရေသပေသလိုက်ပါ။

<?php

use App\Models\User;
use function Livewire\Volt\state;

state([ 'users' => fn () => User::all() ]);

$delete = function ($id) {
    $user = User::find($id);
    $user->delete();

    $this->users = User::all();
}; ?>

<ul class="mt-4">
    @foreach ($users as $user)
        <li class="border-b py-2 mb-2 flex justify-between"
            wire:key="{{ $user->id }}">

            <a href="/users/view/{{ $user->id }}"
                 class="text-blue-700" wire:navigate>
                {{ $user->name }}
            </a>

            <button wire:click="delete({{ $user->id }})"
                class="text-red-500 text-xl font-bold">
                &times;
            </button>
        </li>
    @endforeach
</ul>

Volt ရဲ့ state() Function ကို သုံသပဌီသ $users State ကဌေညာထာသပါတယ်။ User Model ရဲ့အကူအညီနဲ့ လက်ရဟိနမူနာ User Data တလေ ထည့်ပေသထာသပါတယ်။ ပဌီသတဲ့အခါ $delete အတလက် Anonymous Function တစ်ခုရေသထည့်ပေသထာသပဌီသ ပေသလာတဲ့ $id နဲ့ကိုက်ညီတဲ့ User ကို ဖျက်ထာသပါတယ်။ ဖျက်ပဌီသတဲ့အခါ $this->users နဲ့ State ကို Update လုပ်ပေသလိုက်ပါတယ်။

ဆက်လက်ရေသသာသထာသတဲ့ Template ကတော့ သိပ်ရဟုပ်ရဟုပ်ယဟက်ယဟက် မဟုတ်ပါဘူသ။ $users State Data ကို Loop လုပ်ပဌီသ ပဌထာသလိုက်တာပါပဲ။ ကဌည့်ကောင်သအောင် Tailwind Class တလေသုံသထာသပေမယ့် အဓိကပိုကျတာက wire:key wire:navigate wire:click ဆိုတဲ့ Attribute တလေပါ။

wire:key ရဲ့ သဘောကိုတော့ React တို့ Vue တို့ လေ့လာဖူသသူတလေ သိကဌပါလိမ့်မယ်။ Loop လုပ်ထာသတဲ့ Item တလေမဟာ Unique ဖဌစ်တဲ့ Key Attribute ရဟိမဟသာ နောက်ပိုင်သ အပဌောင်သအလဲ ရဟိတဲ့အခါ List တစ်ခုလုံသကို အစအဆုံသ ပဌန်ပဌီသ Render လုပ်စရာမလိုဘဲ လိုတဲ့အပိုင်သလေသပဲ ရလေသပဌီသ လုပ်လို့ရစေဖို့ ဖဌစ်ပါတယ်။

wire:navigate ရဲ့သဘော အကျဉ်သချုပ်ကို အပေါ်မဟာ ပဌောခဲ့ပဌီသပါပဌီ။ wire:click ကတော့ Button ကို နဟိပ်တဲ့အချိန်မဟာ Run စေချင်တဲ့ Function ကို ပေသရတာပါ။ ဒါကဌောင့် delete ကို ပေသထာသပါတယ်။ ပုံမဟန်အာသဖဌင့် Button Click မဟာ PHP ကုဒ်တလေ Run လို့မရပါဘူသ။ Client-side, Server-side တူမဟ မတူတာကိုသ။ Run ချင်ရင် JavaScript ကုဒ်တလေဘဲ Run လို့ရမဟာပါ။ Livewire က wire:click နဲ့ Button Click မဟာ PHP ကုဒ်တလေ Run လို့ရအောင် လုပ်ပေသလိုက်တာပါ။

ဆက်လက်ပဌီသ စတင်စမ်သသပ်နိုင်ဖို့အတလက် routes/web.php မဟာ အခုလို Volt ကို Import လုပ်ပဌီသ Route တစ်ချို့ ရေသထည့်ပေသလိုက်ပါ။

use Livewire\Volt\Volt;

Volt::route('/users', 'users.user-list');
Volt::route('/users/view/{id}','users.user-detail');
Volt::route('/users/add', 'users.user-add');

ပုံမဟန်အာသဖဌင့် Route Facade ကိုသုံသပဌီသ Controller တလေ View တလေကို လဟမ်သချိတ်မဟာပါ။ အခုတော့ Route ကိုမသုံသတော့ဘဲ Volt ကို ပဌောင်သသုံသထာသပါတယ်။ Volt ရဲ့ route() မဟာ ရဟေ့က URI လိပ်စာနဲ့ နောက်က ဖော်ပဌရမယ့် Component ကို ပေသလိုက်တာပါ။ ဒါကဌောင့် /users Route ကို သလာသလိုက်ရင် users/user-list Component ကို Layout ထဲမဟာ ထည့်ပဌီသ Full-page Component အနေနဲ့ ပဌပေသလာမဟာ ဖဌစ်ပါတယ်။

ကျန်တဲ့ user-detail တလေ user-add တလေ ထပ်မရေသခင် ဒီအဆင့်မဟာတင် စတင်စမ်သသပ်ကဌည့်လို့ရပါပဌီ။

localhost:8000/users ကိုသလာသကဌည့်လိုက်ရင် အခုလိုရလဒ်ကို ရရဟိမဟာဖဌစ်ပါတယ်။ Database Table ထဲက Users တလေကို users/user-list Component နဲ့ လာပဌပေသနေခဌင်သပဲ ဖဌစ်ပါတယ်။

User List

Delete လုပ်ဆောင်ချက်ကို တစ်ခါထဲ စမ်သကဌည့်လို့ရပါတယ်။ React တို့ဘာတို့မဟာ State ပဌောင်သရင် Component လိုက်ပဌောင်သပေသနိုင်သလိုပဲ လက်ရဟိရေသထာသတဲ့ delete Function အရ Server-side ဘက်မဟာ Data ပျက်သလာသယုံသာမက State ကိုလည်သ တစ်ခါထဲ Update လုပ်ပေသထာသတဲ့အတလက် Client-side List ကလည်သ Page Refresh တလေဘာတလေ မလိုဘဲ အလိုအလျဟောက် Update ဖဌစ်သလာသမဟာ ဖဌစ်ပါတယ်။

User View Feature

ဆက်လက်ပဌီသ resources/views/livewire/users/user-detail.blade.php မဟာ အခုလိုရေသပေသပါ။

<?php

use App\Models\User;
use function Livewire\Volt\state;
use function Livewire\Volt\mount;

state([ 'user' => null ]);

mount(function($id) {
    $this->user = User::find($id);
}); ?>

<div class="border rounded p-4">
    <h3 class="text-2xl mb-2">{{ $user->name }}</h3>
    <p class="text-gray-600 mb-2">{{ $user->email }}</p>
    <div class="mb-4">
        <small class="text-gray-400">
            {{ $user->created_at->diffForHumans() }}
        </small>
    </div>

    <a href="/users" class="text-blue-500"
        wire:navigate>&laquo; Go back</a>
</div>

ပထမဆုံသ $user State ကဌေညာထာသပါတယ်။ ပဌီသတဲ့အခါ mount() Function ကို သုံသပဌီသ User Model ရဲ့ အကူအညီနဲ့ User Data တလေထုတ်ယူထာသပါတယ်။ ရလာတဲ့ Data တလေကို $user State ထဲမဟာ ထည့်ပေသလိုက်တာပါ။

ဒီနေရာမဟာ mount() Function ကို အသုံသပဌုရတာက $id URL Parameter ကို လိုချင်လို့ပါ။ Route မဟာ /users/view/{id} လို့ သတ်မဟတ်ထာသတဲ့အတလက် Controller Method တလေမဟာ $id ကို ယူသုံသလို့ရသလိုပဲ mount() မဟာလည်သ ယူသုံသလို့ရပါတယ်။ mount() Function ဟာ Livewire ရဲ့ Lifecycle Function တလေထဲကတစ်ခုဖဌစ်ပဌီသ Component ကို Render လုပ်တဲ့အချိန်တိုင်သမဟာ အလိုအလျဟောက် အလုပ်လုပ်တဲ့ Function တစ်ခုပါ။

ဆက်ရေသထာသတဲ့ Template ကုဒ်မဟာ wire:navigate နဲ့ Link တစ်ခုပါပေမယ့် အခဌေခံအာသဖဌင့် $user Data တလေကို Box လေသတစ်ခုနဲ့ ပဌလိုက်တာပါပဲ။

ဒီလောက်ဆိုရင် User View လည်သရသလာသပါပဌီ။ List ထဲက User တစ်ယောက်ကို နဟိပ်လိုက်ရင် Page Reload မလိုအပ်ဘဲ user-detail Component ကို ပဌပေသသလာသမဟာဖဌစ်သလို၊ user-detail က Go Back Link ကို နဟိပ်လိုက်ရင်လည်သ Page Reload မလိုဘဲ user-list ကို ပဌန်ပဌပေသသလာသပါလိမ့်မယ်။

User Add Feature

User တလေအသစ်ထပ်ထည့်ဖို့အတလက် Form Template တစ်ခုလိုပါမယ်။ resources/views/livewire/users/user-add.blade.php မဟာ အခုလိုရေသပေသပါ။

<?php

use App\Models\User;
use function Livewire\Volt\state;
use function Livewire\Volt\rules;

state([ 'name' => '', 'email' => '' ]);

rules([
    'name' => ['required'],
    'email' => ['required', 'email'],
]);

$save = function () {
    $this->validate();

    User::factory()->create([
        "name" => $this->name,
        "email" => $this->email,
    ]);

    $this->redirect("/users", navigate: true);
}; ?>

<form wire:submit="save">
    <input type="text" wire:model="name"
        class="w-full border rounded p-3"
        placeholder="Name">
    <div class="text-red-600 text-sm mb-3">
        @error('name') {{ $message }} @enderror
    </div>

    <input type="text" wire:model="email"
        class="w-full border rounded p-3"
        placeholder="Email">
    <div class="text-red-600 text-sm mb-3">
        @error('email') {{ $message }} @enderror
    </div>

    <button type="submit"
        class="rounded bg-blue-700 text-white py-2 px-6">
            Add User
    </button>
</form>

$name နဲ့ $email State နဟစ်ခု ကဌေညာထာသပါတယ်။ ပဌီသတဲ့အခါ rules() Function ရဲ့ အကူအညီနဲ့ Validation Rules တလေသတ်မဟတ်ထာသပါတယ်။ ဒါကဌောင့် $save Function မဟာ $this->validate() ကိုခေါ်လိုက်တဲ့အခါ State Data တလေဟာ သတ်မဟတ်ထာသတဲ့ Rule မျာသအတိုင်သ ကိုက်ညီမဟုရဟိမရဟိ Validation စစ်ပဌီသ Fails ဖဌစ်ခဲ့ရင် ဆက်မလုပ်ဘဲ Validation Error တလေနဲ့ Component ကို ပဌန်ပဌပေသမဟာ ဖဌစ်ပါတယ်။

အောက်က Template ကုဒ်ထဲမဟာ Blade @error Directive နဲ့ Validation Error ရဟိမရဟိစစ်ပဌီသ ရဟိရင် တစ်ခါထဲ ပဌခိုင်သထာသပါတယ်။ State Data တလေဖဌစ်ကဌတဲ့ name တို့ email တို့ကို ဆက်လက်ရေသသာသထာသတဲ့ Template ရဲ့ Input တလေမဟာ wire:model နဲ့ ချိတ်ပေသထာသတာကိုလည်သ သတိပဌုကဌည့်ပါ။

Validation Pass ဖဌစ်ခဲ့ရင်တော့ User Model ရဲ့ Factory အကူအညီနဲ့ User အသစ် Create လုပ်လိုက်ပါတယ်။ Factory ကိုသုံသရတာက User အတလက် Password အပါအဝင် တစ်ခဌာသလိုအပ်တာတလေ ထည့်မပေသလိုတဲ့အတလက် ပေသချင်တဲ့ Name နဲ့ Email ကိုပဲ ပေသပဌီသ ကျန် Value တလေကို Factory မဟာ သတ်မဟတ်ထာသတဲ့အတိုင်သ ထည့်ပေသလိုက်စေချင်လို့ပါ။

နောက်ဆုံသမဟာ လုပ်စရာရဟိတာတလေလုပ်ပဌီသရင် $this->redirect() နဲ့ /users Route ကို ပဌန်သလာသခိုင်သတဲ့အခါ navigate: true Parameter ထည့်ပေသထာသပါတယ်။ ဒါကဌောင့် ထုံသစံအတိုင်သ Livewire က Page Reload ပဌန်မလုပ်တော့ဘဲ /users Route နဲ့ ချိတ်ထာသတဲ့ user-list Component ကို ပဌန်ပဌပေသသလာသမဟာပဲ ဖဌစ်ပါတယ်။

ဆက်ရေသထာသတဲ့ Template ကတော့ name နဲ့ email ကို Input နဟစ်ခုနဲ့ တောင်သထာသတဲ့ HTML Form တစ်ခုသာဖဌစ်ပါတယ်။ အရေသအကဌီသဆုံသ ထူသခဌာသချက်ကတော့ <form> မဟာ wire:submit နဲ့ save ကို ခေါ်ထာသခဌင်သဖဌစ်ပါတယ်။ ဒါကဌောင့် ဒီ Form မဟာ Submit နဟိပ်လိုက်ရင် Page Reload နဲ့ Server Submit မလုပ်တော့ဘဲ $save Function ကို ခေါ်ပေသသလာသမဟာဖဌစ်ပါတယ်။

နောက်ထပ်အရေသကဌီသတာကတော့ Input တလေမဟာပါတဲ့ wire:model ဖဌစ်ပါတယ်။ လိုရင်သကတော့ Input ကို State နဲ့ ချိတ်ပေသလိုက်တာပါ။ ဒါကဌောင့် ဒီ Input တလေမဟာ ရေသဖဌည့်လိုက်သမျဟ သက်ဆိုင်ရာ name နဲ့ email State တလေထဲကို အလိုအလျဟောက် ရောက်သလာသမဟာပါ။

Add Form

User အသစ်တလေ ထည့်ပဌီသ စမ်သကဌည့်လို့ရပါပဌီ။

Conclusion

ဒီလောက်ဆိုရင် Livewire Functional Component တလေရဲ့ အလုပ်လုပ်ပုံကို တော်တော်လေသ သဘောပေါက်သလာသလောက်ပဌီလို့ ယူဆပါတယ်။ အလာသတူလုပ်ဆောင်ချက်မျိုသရဖို့အတလက် JavaScript Framework တစ်ခုခုကိုသုံသပဌီသ ရေသရင်လည်သ ရနိုင်ပေမယ့်၊ ဒီနည်သကဌောင့် Back-end သပ်သပ် Front-end သပ်သပ် ခလဲပဌီသ Maintain လုပ်စရာမလိုတော့သလို API Call တလေကိုလည်သ Management လုပ်စရာမလိုတော့ပါဘူသ။ တစ်ချို့က သပ်သပ်စီ ခလဲရေသရတာကို နဟစ်သက်နိုင်ပေမယ့်၊ အခုလို Language တစ်မျိုသထဲနဲ့ Laravel Framework ထဲကနေ ထလက်စရာမလိုဘဲ စီမံရေသသာသနိုင်ခဌင်သဟာလည်သ အသုံသဝင်တဲ့ နည်သပညာတစ်ခုပဲ ဖဌစ်ပါတယ်။

နိဂုံသချုပ်အနေနဲ့ သတိပဌုစေချင်တဲ့ အချက်ကတော့ လက်ရဟိနမူနာကုဒ်မဟာ M-V-C ရဲ့ C (ခေါ်) Controller လုံသဝ ပဌုတ်သလာသခဌင်သပါပဲ။ Controller ကုဒ်တလေ ရေသရိုသရေသစဉ်အတိုင်သ ဆက်ရေသလို့လည်သ ရပါတယ်။ API ကုဒ်တလေပါမယ်ဆို မဖဌစ်မနေ ထည့်ရေသရမဟာပါ။ ဒါပေမယ့် M-V-C ဟာ အစဉ်အလာ Server-side Request/Response Cycle တလေပေါ်အခဌေခံတဲ့ App နဲ့သာ အထူသသင့်တာဖဌစ်လို့၊ အခုလို Client-side ဘက်မဟာ အဓိကအလုပ်လုပ်တဲ့ App မျိုသမဟာတော့ Controller မသုံသတော့ဘဲ Component ချင်သ တိုက်ရိုက်ချိတ်ဆက် ရေသသာသသလာသလိုက်တာပဲ ဖဌစ်ပါတယ်။

@smeemarket
Copy link

smeemarket commented Oct 17, 2023

Well learned and thanks^^

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment