Ein „Hallo Welt – Hello Word“ für Inertiajs mit Laravel 8 und Vue3

Was ist Laravel?

Was ist vue.js?

Was ist inertiajs?

Voraussetzungen

Um Inertiajs mit Laravel 8 und Vue3 zu nutzen sind folgende Kenntnisse erforderlich und die entsprechende Software auf Deinem Webserver:

Grundlegende Kenntnisse im Umgang mit node und npm, composer, php, SQL und HTML, CSS, Javascript

Installation

Öffne deine Shell als „Webuser“ und erstelle ein neues Laravel Projekt in Deinem Webverzeichnis. Der „create-project“ Befehl erstellt ein neues Verzeichnis, welches ein Unterverzeichnis „public“ enthält. Dieses muss deine neue Webroot werden.

Neues Projekt in Laravel erstellen

composer create-project --prefer-dist laravel/laravel meinProjekt

Das Verzeichnis „MeinProjekt“ wird angelegt und alles notwendige für Laravel erstellt.

Webroot umlegen

Lege dein WebRoot um auf den Ordner „public“ im neuangelegtem Verzeichnis, so dass beim Aufruf deiner Domain die index.php in der Verzeichnis ./public aufgerufen wird.

Die Laravelstartseite müsste jetzt beim Aufruf deiner Webseite erscheinen.

Inertiajs dem Laravel Projekt hinzufügen

In dem Ordner „./meinProjekt/“ wird die neu erstelle Composer.json um „inertiajs/inertia-laravel“ erweitert.

composer require inertiajs/inertia-laravel

Die Middleware konfigurieren

php artisan inertia:middleware

In der Datei ./MeinProjekt/app/Http/Kernel.php muss der Eintrag

\App\Http\Middleware\HandleInertiaRequests::class,

zu dem Array $middlewareGroups[‚web‘] als letzter Eintrag hinzugefügt werden.

Clientseitige Abhängigkeiten mit dem node package manager verwalten

npm install @inertiajs/inertia @inertiajs/inertia-vue3
npm install vue@next
npm install @inertiajs/progress

Dateien, app.blade.php, app.js und webpack-mix.js, anpassen

Das Template „app.blade.php“ mit dem Intertia-Code erstellen bzw. ersetzen.

./MeinProjekt/resources/views/app.blade.php mit diesem Code erzeugen:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
    <link href="{{ mix('/css/app.css') }}" rel="stylesheet" />
    <script src="{{ mix('/js/app.js') }}" defer></script>
  </head>
  <body>
    @inertia
  </body>
</html>

„createInertiaApp“-Aufruf in ./MeinProjekt/resources/js/app.js einfügen

Den Inhalt der Datei ./MeinProjekt/resources/js/app.js mit folgendem Code austauschen, bzw. ergänzen:

import { createApp, h } from "vue";
import { createInertiaApp } from "@inertiajs/inertia-vue3";
import { InertiaProgress } from "@inertiajs/progress";
 
InertiaProgress.init();

createInertiaApp({
    resolve: (name) => require(`./Pages/${name}`),
    setup({ el, App, props, plugin }) {
        createApp({ render: () => h(App, props) })
            .use(plugin)
            .mount(el);
    },
});

webpack.mix.js

const mix = require("laravel-mix");

/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel applications. By default, we are compiling the CSS
 | file for the application as well as bundling up all the JS files.
 |
 */

mix.js("resources/js/app.js", "public/js")
    .vue()
    .postCss("resources/css/app.css", "public/css", [
        //
    ]);

mix.webpackConfig({
    output: {
        chunkFilename: "js/[name].js?id=[chunkhash]",
    },
});

Vue-Template erstellen

Der Ordner „./MeinProjekt/resources/js/Pages“ muss erstellt werden, siehe hierzu auch die resources/js/app.js.

Erstelle ein neues Template, Hallo.vue.

<template>
    <div>
        <h1>Hallo {{ welt }}</h1>
    </div>
</template>

<script>
export default {
    props: ["welt"],
};
</script>

routes/web.php anpassen

Füge der ./MeinProjekt/routes/web.php den use-Befehl „use Inertia\Inertia“ hinzu und passe die Route an, in dem statt view() der Aufruf Inertia::render() retuniert wird.


<?php

use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return Inertia::render('Home', ['welt' => 'Andreas Wiemer']);
});

Installiere und kompiliere die Pakete mit npm

npm ci
npm run dev

Der Ordner „node_modules“ wurde dem Projekt hinzugefügt. Siehe in die „packages.json“ für die Befehle zur Kompilierung, Minifizierung und Bereitstellung der Assets, also der Javascript- und CSS-Dateien. Das kann jederzeit erfolgen und wird später nochmal erforderlich sein.

Jetzt kann die Seite aufgerufen werden!

Schreibe einen Kommentar