Waren

Vue und Laravel: Erstellen Sie eine Single Page Application

Laravel ist eines der beliebtesten PHP-Frameworks, das von Entwicklern verwendet wird. Sehen wir uns heute an, wie man eine Single-Page-Anwendung mit VueJs erstellt.

Vor der Einführung der Laravel-Benutzeroberfläche war eine der Hauptfunktionen die VorabunterstützungdefiNacht für Vue.js von Laravel v5.3 auf v6. Vue ist ein modernes JavaScript-Frontend-Framework zum Erstellen von Benutzeroberflächen.

Warum Laravel und Vue zusammen installieren?

Hier sind einige der Hauptvorteile der Verwendung von Laravel mit Vue, um einen vollständigen Workflow für Ihre Projekte zu erstellen:

Der Quellcode wird in einem Projekt zusammengefasst, anstatt getrennte Projekte für Backend und Frontend zu haben
Installation und Konfiguration sind einfach
Eine einzige Distribution kann beide Frameworks zusammen verwalten

Was ist ein SPA? (Einseitige Bewerbung)

Eine einseitige Anwendung (kurz SPA) lädt dynamisch neue Daten von einem Webserver in eine Webseite, ohne dass die gesamte Seite aktualisiert werden muss.

Beispiele für beliebte Websites, die SPAs verwenden, sind gmail.com und youtube.com – mit anderen Worten, SPAs sind weitgehend allgegenwärtig. Die meisten Admin-Dashboards, mit denen Sie möglicherweise täglich arbeiten, werden mit SPA erstellt.

Vorteile von SPAs:

Die Benutzererfahrung ist flexibler
Daten im Browser zwischenspeichern
Schnelle Ladezeit


Nachteile von SPAs:

Kann SEO (Suchmaschinenoptimierung) beeinträchtigen
Mögliche Sicherheitsprobleme
Es verbraucht eine Menge Browser-Ressourcen

Projektkonfiguration in Laravel

Dieser Beitrag zeigt, wie man eine Aufgaben-App entwickelt, die es Benutzern ermöglicht, sich für ein Konto anzumelden und Aufgaben hinzuzufügen.

Für dieses Tutorial wird Laravel 9 verwendet, das PHP 8.1 und Vue 3 erfordert; Wir müssen auch PHP und NGINX installiert haben.

Wir beginnen mit folgendem Befehl:

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

Als Nächstes installieren wir die JavaScript-Abhängigkeiten.

npm install

Wir müssen einige Pakete installieren, bevor wir Vue zu unserem Projekt hinzufügen können.

Außerdem muss plugin-vue installiert werden, da Laravel 9 mit Vite ausgeliefert wird, und nicht mit webpack-mix, dem früheren Laravel-Bundle für JavaScript. Lass es uns jetzt machen:

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

Öffnen Sie die aufgerufene Datei vite.config.js und hinzufügen vue() zur Konfiguration:

Innovations-Newsletter
Verpassen Sie nicht die wichtigsten Neuigkeiten zum Thema Innovation. Melden Sie sich an, um sie per E-Mail zu erhalten.
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',
        ]),
    ],
});

Bearbeiten Sie die Datei app.js und das Bootstrap-Snippet für die Vue 3-App:

require('./bootstrap');

import {createApp} from 'vue'

import App from './App.vue'

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

Erstellen Sie eine Datei namens App.vue und folgendes hinzufügen:

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

   }
}
</script>

Öffnen Sie abschließend die Datei welcome.blade.php befindet sich im Ordner resources/views und folgendes hinzufügen:

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

Um eine Vorschau unserer App anzuzeigen, müssen wir unsere Vue-App und den Laravel-Server auf zwei verschiedenen Terminals/Befehlszeilen starten:

npm run dev


php artisan serve

Um unsere To-Do-App zu erstellen, müssen wir andere Dateien erstellen. Vue erstellt mehrere Seiten, hauptsächlich:

  • Zugriff
  • zur Anmeldung
  • Eine Homepage


Um mit Laravel-Endpunkten zu kommunizieren, müssen wir Axios installieren:

npm install axios

vue-Routing

Verwenden des Pakets vue-router, gibt es verschiedene Routing-Strategien, die in Vue verwendet werden können; Diese Strategien werden auch als bezeichnet history models.

Wenn ein Benutzer anfordert route wie http://localhost:8000/home, das einen 404-Fehler zurückgibt, wenn die Seite aktualisiert wird, können wir uns darauf verlassen, dass Laravel Fallback-Routen erkennt und dann die Blade-Datei bereitstellt, die unsere App enthält.

Aus diesem Grund verwenden wir den HTML5-Modus:

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

In diesem Beispiel behandeln wir die Authentifizierung mit Laravel-Heiligtum, dann wird das Token im lokalen Speicher gespeichert.

Damit andere Anfragen erfolgreich sind, wird das Token in den Header eingefügt, wodurch der Benutzer, der die Anfrage stellt, von Laravel identifiziert werden kann.

Hier sind die zugehörigen Codeblöcke für beide:

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

Das könnte Sie auch interessieren ...

Innovations-Newsletter
Verpassen Sie nicht die wichtigsten Neuigkeiten zum Thema Innovation. Melden Sie sich an, um sie per E-Mail zu erhalten.

Aktuelle Artikel

So organisieren Sie Daten und Formeln in Excel am besten für eine gelungene Analyse

Microsoft Excel ist das Referenztool für die Datenanalyse, denn es bietet viele Funktionen zum Organisieren von Datensätzen,…

14. Mai 2024

Positives Fazit für zwei wichtige Walliance Equity Crowdfunding-Projekte: Jesolo Wave Island und Milano Via Ravenna

Walliance, SIM und Plattform, die seit 2017 zu den Marktführern in Europa im Bereich Immobilien-Crowdfunding zählt, gibt den Abschluss bekannt…

13. Mai 2024

Was ist Filament und wie wird Laravel Filament verwendet?

Filament ist ein „beschleunigtes“ Laravel-Entwicklungsframework, das mehrere Full-Stack-Komponenten bereitstellt. Es soll den Prozess vereinfachen...

13. Mai 2024

Unter der Kontrolle künstlicher Intelligenzen

„Ich muss zurückkehren, um meine Entwicklung zu vollenden: Ich werde mich in den Computer hineinprojizieren und reine Energie werden.“ Einmal eingelebt…

10. Mai 2024

Googles neue künstliche Intelligenz kann DNA, RNA und „alle Moleküle des Lebens“ modellieren

Google DeepMind stellt eine verbesserte Version seines Modells der künstlichen Intelligenz vor. Das neue, verbesserte Modell bietet nicht nur…

9. Mai 2024

Erkundung der modularen Architektur von Laravel

Laravel, bekannt für seine elegante Syntax und leistungsstarken Funktionen, bietet auch eine solide Grundlage für modulare Architektur. Dort…

9. Mai 2024

Cisco Hypershield und Übernahme von Splunk Die neue Ära der Sicherheit beginnt

Cisco und Splunk unterstützen Kunden dabei, ihren Weg zum Security Operations Center (SOC) der Zukunft zu beschleunigen, mit…

8. Mai 2024

Jenseits der wirtschaftlichen Seite: die nicht offensichtlichen Kosten von Ransomware

Ransomware dominiert seit zwei Jahren die Nachrichten. Den meisten Menschen ist durchaus bewusst, dass Angriffe…

6. Mai 2024