Artikkelit

Vue ja Laravel: luo yhden sivun sovellus

Laravel on yksi suosituimmista kehittäjien käyttämistä PHP-kehyksistä, katsotaanpa tänään, kuinka yhden sivun sovellus tehdään VueJ:illä.

Ennen Laravel UI:n julkaisua yksi sen pääominaisuuksista oli esitukidefiiltaa varten Vue.js Laravel v5.3:sta v6:een. Vue on moderni JavaScript-käyttöliittymäkehys, jota käytetään käyttöliittymien rakentamiseen.

Miksi Laravel ja Vue asennetaan yhdessä?

Tässä on joitain Laravelin ja Vuen käytön tärkeimmistä eduista luodaksesi täydellisen työnkulun projekteillesi:

Lähdekoodi yhdistetään yhdeksi projektiksi sen sijaan, että tausta- ja käyttöliittymälle olisi erilliset projektit
Asennus ja konfigurointi ovat yksinkertaisia
Yksi jakelu voi hallita molempia kehyksiä yhdessä

Mikä on SPA? (yksisivuinen hakemus)

Una yhden sivun sovellus (lyhyesti SPA) lataa dynaamisesti uutta tietoa verkkopalvelimelta verkkosivulle ilman, että koko sivua tarvitsee päivittää.

Esimerkkejä suosituista SPA-palveluita käyttävistä verkkosivustoista ovat gmail.com ja youtube.com – toisin sanoen SPA:t ovat suurelta osin kaikkialla. Suurin osa järjestelmänvalvojan hallintapaneeleista, joiden kanssa saatat työskennellä päivittäin, on rakennettu SPA:n avulla.

SPA:n edut:

Käyttökokemus on joustavampi
Välimuisti tiedot selaimessa
Nopea latausaika


SPA:n haitat:

Saattaa vaarantaa SEO (hakukoneoptimointi)
Mahdolliset turvallisuusongelmat
Se kuluttaa paljon selaimen resursseja

Projektin konfigurointi Laravelissa

Tämä viesti osoittaa, kuinka kehittää tehtäväsovellus, jonka avulla käyttäjät voivat rekisteröityä tilille ja lisätä tehtäviä.

Tässä opetusohjelmassa käytetään Laravel 9:ää, joka vaatii PHP 8.1:n ja Vue 3:n; meillä on myös oltava asennettuna PHP ja NGINX.

Aloitamme seuraavalla komennolla:

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

Seuraavaksi asennamme JavaScript-riippuvuudet.

npm install

Meidän on asennettava joitain paketteja ennen kuin voimme lisätä Vuen projektiimme.

Myös plugin-vue on asennettava, koska Laravel 9 toimitetaan Viten kanssa webpack-mixin sijaan, joka oli edellinen Laravelin JavaScript-paketti. Tehdään se nyt:

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

Avaa tiedosto nimeltä vite.config.js ja lisää vue() kokoonpanoon:

Innovaatio-uutiskirje
Älä missaa tärkeimpiä innovaatioita koskevia uutisia. Rekisteröidy saadaksesi ne sähköpostitse.
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',
        ]),
    ],
});

Muokkaa Vue 3 -sovelluksen app.js-tiedostoa ja bootstrap-koodinpätkää:

require('./bootstrap');

import {createApp} from 'vue'

import App from './App.vue'

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

Luo tiedosto nimeltä App.vue ja lisää seuraavat:

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

   }
}
</script>

Avaa lopuksi tiedosto welcome.blade.php sijaitsee kansiossa resources/views ja lisää seuraavat:

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

Sovelluksen esikatselua varten meidän on käynnistettävä Vue-sovellus ja Laravel-palvelin kahdella eri päätteellä/komentorivillä:

npm run dev


php artisan serve

Tehtäväsovelluksemme luomiseksi meidän on luotava muita tiedostoja. Vue luo useita sivuja, pääasiassa:

  • pääsystä
  • rekisteröintiä varten
  • Kotisivu


Jotta voimme kommunikoida Laravel-päätepisteiden kanssa, meidän on asennettava Axios:

npm install axios

vue-reititys

Paketin käyttö vue-router, on olemassa erilaisia ​​reititysstrategioita, joita voidaan käyttää Vuessa; nämä strategiat tunnetaan myös nimellä history models.

Kun käyttäjä pyytää route kuten http://localhost:8000/home, joka palauttaa 404-virheen, kun sivu päivitetään, voimme luottaa siihen, että Laravel havaitsee varareitit ja palvelee sitten sovelluksemme sisältävän Blade-tiedoston.

Tästä syystä käytämme HTML5-tilaa:

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')
        }
    ],
})

Tässä esimerkissä käsittelemme todennusta käyttämällä Laravel Sanctum, sitten tunnus tallennetaan paikalliseen tallennustilaan.

Jotta muut pyynnöt onnistuvat, merkki yhdistetään otsikkoon, jolloin Laravel tunnistaa pyynnön tekevän käyttäjän.

Tässä on molempien koodilohkot:

<!--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

Voisit myös olla kiinnostunut näistä ...

Innovaatio-uutiskirje
Älä missaa tärkeimpiä innovaatioita koskevia uutisia. Rekisteröidy saadaksesi ne sähköpostitse.

Viimeaikaiset artikkelit

Cisco Talos neljännesvuosittainen analyysi: rikollisten kohteeksi joutuneet yrityssähköpostit Valmistus, koulutus ja terveydenhuolto ovat eniten kärsineet alat

Yrityssähköpostien kompromissi lisääntyi yli kaksinkertaiseksi vuoden 2024 kolmen ensimmäisen kuukauden aikana vuoden viimeiseen neljännekseen verrattuna…

14 Toukokuu 2024

Rajapintojen erotteluperiaate (ISP), neljäs SOLID-periaate

Käyttöliittymän erotteluperiaate on yksi oliosuuntautuneen suunnittelun viidestä SOLID-periaatteesta. Luokassa pitäisi olla…

14 Toukokuu 2024

Kuinka parhaiten organisoida tiedot ja kaavat Excelissä hyvin tehtyä analyysiä varten

Microsoft Excel on vertailutyökalu tietojen analysointiin, koska se tarjoaa monia ominaisuuksia tietojoukkojen järjestämiseen,…

14 Toukokuu 2024

Positiivinen johtopäätös kahdelle tärkeälle Walliance Equity -joukkorahoitusprojektille: Jesolo Wave Island ja Milano Via Ravenna

Walliance, SIM ja alusta Euroopan johtajien joukossa kiinteistöjen joukkorahoituksen alalla vuodesta 2017 lähtien, ilmoittaa valmistuneensa…

13 Toukokuu 2024

Mikä on Filament ja miten Laravel Filamentia käytetään

Filament on "kiihdytetty" Laravel-kehityskehys, joka tarjoaa useita täyden pinon komponentteja. Se on suunniteltu yksinkertaistamaan prosessia…

13 Toukokuu 2024

Tekoälyn hallinnassa

"Minun on palattava saadakseni evoluutioni päätökseen: projisoin itseni tietokoneen sisään ja minusta tulee puhdasta energiaa. Asuttuaan…

10 Toukokuu 2024

Googlen uusi tekoäly voi mallintaa DNA:ta, RNA:ta ja "kaikkia elämän molekyylejä"

Google DeepMind esittelee parannetun version tekoälymallistaan. Uusi parannettu malli tarjoaa paitsi…

9 Toukokuu 2024

Laravelin modulaariseen arkkitehtuuriin tutustuminen

Laravel, joka on kuuluisa elegantista syntaksistaan ​​ja tehokkaista ominaisuuksistaan, tarjoaa myös vankan perustan modulaariselle arkkitehtuurille. Siellä…

9 Toukokuu 2024