Artikoli

Vue na Laravel: mepụta Ngwa Ibe Otu

Laravel bụ otu n'ime usoro PHP kachasị ewu ewu nke ndị mmepe na-eji, ka anyị hụ taa ka esi eme ngwa otu ibe na VueJ.

Tupu mmalite nke Laravel UI, otu n'ime njirimara ya bụ nkwado mbụdefiakwadoro maka View.js sitere na Laravel v5.3 ruo v6. Vue bụ usoro ihu ihu Javascript ọgbara ọhụrụ ejiri wuo ebe ndị ọrụ.

Kedu ihe kpatara ịwụnye Laravel na Vue ọnụ?

Nke a bụ ụfọdụ uru dị na iji Laravel na Vue mepụta usoro ọrụ zuru oke maka ọrụ gị:

A na-ejikọta koodu isi mmalite n'ime otu ọrụ, kama inwe ọrụ dị iche iche maka azụ azụ na frontend
Nwụnye na nhazi dị mfe
Otu nkesa nwere ike ijikwa usoro abụọ ahụ ọnụ

Kedu ihe bụ SPA? (ngwa nwere otu ibe)

una ngwa otu ibe (SPA maka nkenke) na-ebunye data ọhụrụ sitere na sava weebụ n'ike n'ike n'ime ibe weebụ na-enweghị iweghachite ibe ahụ dum.

Ọmụmaatụ nke webụsaịtị ewu ewu na-eji SPA gụnyere gmail.com na youtube.com – na okwu ndị ọzọ, SPA bụ ebe niile. A na-ewu ọtụtụ dashboard admin ị nwere ike ịrụ ọrụ kwa ụbọchị site na iji SPA.

Uru nke SPA:

Ahụmahụ onye ọrụ na-agbanwe karịa
Data cache na ihe nchọgharị
Oge nbudata ngwa ngwa


Ọdịmma nke SPA:

Nwere ike imebi SEO (njikarịcha search engine)
Okwu nchekwa enwere ike
Ọ na-eri ọtụtụ ihe nchọgharị

Nhazi oru ngo na Laravel

Ngosipụta a ga-egosipụta otu esi emepụta ngwa ime ihe na-enye ndị ọrụ ohere ịdebanye aha maka akaụntụ wee tinye ọrụ.

Maka nkuzi a, a na-eji Laravel 9, nke chọrọ PHP 8.1 na Vue 3; anyị kwesịkwara itinye PHP na NGINX.

Anyị ji iwu a malite:

composer create-project --prefer-dist laravel/laravel laravel-vue-combo

Ọzọ, anyị ga-etinye ndabere Javascript.

npm install

Anyị kwesịrị ịwụnye ụfọdụ ngwugwu tupu anyị enwee ike itinye Vue na ọrụ anyị.

Ọzọkwa, plugin-vue ga-arụnyere, ebe ọ bụ na Laravel 9 ụgbọ mmiri na Vite, kama webpack-mix, nke bụ gara aga Laravel bundler maka JavaScript. Ka anyị mee ya ugbu a:

npm install vue@next vue-loader@next @vitejs/plugin-vue

Mepee faịlụ a na-akpọ vite.config.js ma tinye vue() na nhazi:

Akwụkwọ akụkọ ọhụrụ
Agbagharala akụkọ kacha mkpa maka ime ọhụrụ. Debanye aha iji nweta ha site na email.
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue'

export default defineConfig({
    plugins: [
        vue(),
        laravel([
            'resources/css/app.css',
            'resources/js/app.js',
        ]),
    ],
});

Dezie faịlụ app.js na snippet bootstrap maka ngwa Vue 3:

require('./bootstrap');

import {createApp} from 'vue'

import App from './App.vue'

createApp(App).mount("#app")

Mepụta faịlụ a na-akpọ App.vue ma tinye ihe ndia:

<template>
  <h1> Hello, Vuejs with Laravel </h1>
</template>
<script>
export default {
  setup() {

   }
}
</script>

N'ikpeazụ, mepee faịlụ ahụ welcome.blade.php dị na nchekwa resources/views ma tinye ihe ndia:

<!DOCTYPE html>
<html>
<head>
 ....
        @vite('resources/css/app.css')
</head>
<body>
  <div id="app"></div>
  @vite('resources/js/app.js')
</body>
</html>

Ka ịhụchalụ ngwa anyị, anyị kwesịrị ibido ngwa Vue anyị na sava Laravel na ọdụ abụọ dị iche iche:

npm run dev


php artisan serve

Iji mepụta ngwa anyị ga-eme, anyị kwesịrị ịmepụta faịlụ ndị ọzọ. Vue ga-emepụta ọtụtụ ibe, tumadi:

  • nke ohere
  • maka ndebanye aha
  • Ibe ụlọ


Iji kwurịta okwu na njedebe Laravel, anyị kwesịrị ịwụnye Axios:

npm install axios

ụzọ ụzọ

Iji ngwugwu vue-router, e nwere dị iche iche routing atumatu nwere ike iji na Vue; a na-akpọkwa atụmatụ ndị a history models.

Mgbe onye ọrụ rịọrọ route dị ka http://localhost:8000/home, nke ga-eweghachite njehie 404 mgbe ihu akwụkwọ ahụ dị ọhụrụ, anyị nwere ike ịdabere na Laravel iji chọpụta ụzọ ọdịda ọ bụla wee jee ozi faịlụ Blade nke nwere ngwa anyị.

Maka nke a, anyị ga-eji ọnọdụ HTML5:

Route::get('/{vue_capture?}', function() {
    return view('welcome');
})->where('vue_capture', '[\/\w\.-]*');
import {createRouter, createWebHistory} from 'vue-router';

const router = createRouter({
    history: createWebHistory(),
    routes: [
        {
            path: '/',
            component: () => import('./pages/Login.vue')
        },
        {
            path: '/register',
            component: () => import('./pages/Register.vue')
        },
        {
            path: '/home',
            component: () => import('./pages/Home.vue')
        }
    ],
})

N'ihe atụ a, anyị na-ejikwa nyocha site na iji Laravel Sanctum, mgbe ahụ, a na-echekwa akara ngosi na nchekwa mpaghara.

Maka arịrịọ ndị ọzọ ka ọ gaa nke ọma, a na-ejikọta akara ahụ n'ime nkụnye eji isi mee, nke ga-eme ka onye ọrụ na-arịọ arịrịọ Laravel mara ya.

Nke a bụ ngọngọ koodu ejikọtara maka ha abụọ:

<!--Login.vue-->
<template>
    <div class="mx-auto w-4/12 mt-10 bg-blue-200 p-4 rounded-lg">
        <div
            class="bg-white shadow-lg rounded-lg px-8 pt-6 pb-8 mb-2 flex flex-col"
        >
            <h1 class="text-gray-600 py-5 font-bold text-3xl"> Login </h1>
            <ul class="list-disc text-red-400" v-for="(value, index) in errors" :key="index" v-if="typeof errors === 'object'">
                <li>{{value[0]}}</li>
            </ul>
            <p class="list-disc text-red-400" v-if="typeof errors === 'string'">{{errors}}</p>
            <form method="post" @submit.prevent="handleLogin">
            <div class="mb-4">
                <label
                    class="block text-grey-darker text-sm font-bold mb-2"
                    for="username"
                >
                    Email Address
                </label>
                <input
                    class="shadow appearance-none border rounded w-full py-2 px-3 text-grey-darker"
                    id="username"
                    type="text"
                    v-model="form.email"
                    required
                />
            </div>
            <div class="mb-4">
                <label
                    class="block text-grey-darker text-sm font-bold mb-2"
                    for="password"
                >
                    Password
                </label>
                <input
                    class="shadow appearance-none border border-red rounded w-full py-2 px-3 text-grey-darker mb-3"
                    id="password"
                    type="password"
                    v-model="form.password"
                    required
                />
            </div>
            <div class="flex items-center justify-between">
                <button
                    class="bg-blue-500 hover:bg-blue-900 text-white font-bold py-2 px-4 rounded"
                    type="submit"
                >
                    Sign In
                </button>
                <router-link
                    class="inline-block align-baseline font-bold text-sm text-blue hover:text-blue-darker"
                    to="register"
                >
                    Sign Up
                </router-link>
            </div>
            </form>
        </div>
    </div>
</template>
export default {
    setup() {
        const errors = ref()
        const router = useRouter();
        const form = reactive({
            email: '',
            password: '',
        })
        const handleLogin = async () => {
            try {
                const result = await axios.post('/api/auth/login', form)
                if (result.status === 200 && result.data && result.data.token) {
                    localStorage.setItem('APP_DEMO_USER_TOKEN', result.data.token)
                    await router.push('home')
                }
            } catch (e) {
                if(e && e.response.data && e.response.data.errors) {
                    errors.value = Object.values(e.response.data.errors)
                } else {
                    errors.value = e.response.data.message || ""
                }
            }
        }

        return {
            form,
            errors,
            handleLogin,
        }
    }
}

Ercole Palmeri

I nwekwara ike inwe mmasị na ...

Akwụkwọ akụkọ ọhụrụ
Agbagharala akụkọ kacha mkpa maka ime ọhụrụ. Debanye aha iji nweta ha site na email.

Ihe odide ndị a

Onye na-ahụ maka mgbochi ntụkwasị obi UK na-ewelite mkpu BigTech na GenAI

UK CMA enyela ịdọ aka ná ntị gbasara omume Big Tech na ahịa ọgụgụ isi. Ebe ahụ…

18 April 2024

Casa Green: mgbanwe ike maka ọdịnihu na-adigide na Italy

Iwu “Case Green”, nke European Union chepụtara iji kwalite nrụpụta ike nke ụlọ, ejirila…

18 April 2024

Ecommerce na Italy na + 27% dị ka akụkọ ọhụrụ Casaleggio Associati si kwuo

Akwụkwọ akụkọ Casaleggio Associati na-eme kwa afọ na Ecommerce na Italy ewepụtara. Akuko nke isiokwu ya bu “AI-Commerce: the frontiers of Ecommerce with Artificial Intelligence”…

17 April 2024

Echiche mara mma: Bandalux na-enye Airpure®, ákwà mgbochi na-eme ka ikuku dị ọcha

Nsonaazụ nke teknụzụ ọhụrụ na ntinye aka na gburugburu ebe obibi na ọdịmma ndị mmadụ. Bandalux na-enye Airpure®, ụlọikwuu…

12 April 2024