{"id":62755,"date":"2022-12-12T16:18:25","date_gmt":"2022-12-12T15:18:25","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=62755&#038;preview=true&#038;preview_id=62755"},"modified":"2023-05-07T14:53:08","modified_gmt":"2023-05-07T13:53:08","slug":"laravel-inertia","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/","title":{"rendered":"Come Usare Inertia.js nei Tuoi Progetti Laravel"},"content":{"rendered":"<p>Le applicazioni multi-pagina (MPA) stanno diventando sempre meno popolari. Piattaforme famose come Facebook, Twitter, YouTube, Github e molte altre usano gi\u00e0 la tecnologia delle applicazioni a pagina singola (SPA).<\/p>\n<p>Questa tecnologia di tendenza permette agli utenti di interagire con le applicazioni web in modo rapido e reattivo perch\u00e9 tutto \u00e8 renderizzato lato client. Tuttavia, pu\u00f2 essere un problema per chi sviluppa applicazioni renderizzate lato server con framework come Laravel o Django.<\/p>\n<p>Per fortuna Inertia.js \u00e8 intervenuto in soccorso.<br \/>\n<\/p>\n<p>In questo articolo vi mostreremo come iniziare a usare Inertia.js e come utilizzarlo con Laravel, Vue.js e Tailwind CSS per creare una moderna applicazione web per blog. Vedremo anche come rendere le SPA pi\u00f9 SEO-friendly e qualche altro trucco.<\/p>\n<p>Se state iniziando a lavorare con Laravel, vi consigliamo di leggere <a href=\"https:\/\/kinsta.com\/it\/blog\/sviluppatore-laravel\/\">prima questo articolo<\/a> per essere pronti a partire.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Perch\u00e9 una SPA?<\/h2>\n<p>Prima di chiederci perch\u00e9 dovremmo usare Inertia, dobbiamo prima chiederci: &#8220;Perch\u00e9 una SPA?&#8221;<\/p>\n<p>Perch\u00e9 qualcuno dovrebbe preferire le applicazioni renderizzate lato client alle tradizionali applicazioni lato server? Cosa spinge sviluppatrici e sviluppatori Laravel full-stack a dire addio ai <a href=\"https:\/\/kinsta.com\/it\/blog\/framework-laravel\/#templating\">componenti blade<\/a>?<\/p>\n<p>La risposta \u00e8 breve: perch\u00e9 la velocit\u00e0 e la reattivit\u00e0 sono essenziali per il successo di un&#8217;applicazione.<\/p>\n<p>Nel caso delle AMP, il browser invia costantemente richieste al backend, che esegue numerose query al database. Dopo che il database e il server elaborano le query e le trasmettono al browser, la pagina viene renderizzata.<\/p>\n<p>Le SPA sono invece diverse. L&#8217;applicazione porta tutto ci\u00f2 di cui l&#8217;utente ha bisogno direttamente nella pagina, eliminando la necessit\u00e0 per il browser di inviare query o ricaricare la pagina per rendere nuovi elementi HTML.<\/p>\n<p>Grazie a questa esperienza unica per l&#8217;utente, molte grandi aziende chiedono a gran voce che i loro siti web diventino applicazioni a pagina singola.<\/p>\n<p>Detto questo, la creazione di un&#8217;applicazione a pagina singola pu\u00f2 essere difficile per chi sviluppa con Laravel perch\u00e9 richiederebbe l&#8217;utilizzo di Vue.js o React al posto dei template blade, con la conseguente perdita di molte gemme di Laravel che fanno risparmiare tempo e fatica.<\/p>\n<p>Ora che abbiamo Inertia.js, per\u00f2, tutto cambia.<\/p>\n<h2>Perch\u00e9 Inertia?<\/h2>\n<p>Se prima di Inertia gli sviluppatori Laravel costruivano web SPA con Vue, dovevano impostare API e restituire dati JSON con Laravel, quindi usare qualcosa come AXIOS per recuperare i dati nei componenti Vue. Avrebbero inoltre bisogno di qualcosa come Vue Router per gestire i percorsi, il che significherebbe perdere il routing di Laravel, cos\u00ec come i middleware e i controller.<\/p>\n<p>Inertia.js, invece, permette di costruire moderne app a pagina singola in Vue, React e Svelte utilizzando il classico routing e i controller lato server. Inertia \u00e8 stato progettato per chi sviluppa con Laravel, Ruby on Rails e Django per consentire loro di creare applicazioni senza modificare le tecniche di programmazione che prevedono la creazione di controller, il recupero dei dati da un database e il rendering delle viste<\/p>\n<p>Grazie a Inertia.js, sviluppatrici e sviluppatori Laravel si sentiranno a casa.<\/p>\n<h2>Come Funziona Inertia<\/h2>\n<p>Costruire SPA solo con Laravel e Vue vi dar\u00e0 una pagina JavaScript completa per il frontend, ma non vi fornir\u00e0 un&#8217;esperienza di app a pagina singola. Ogni link cliccato causer\u00e0 il riavvio del framework lato client al successivo caricamento della pagina.<\/p>\n<p>\u00c8 qui che entra in gioco Inertia.<\/p>\n<p>Inertia \u00e8 fondamentalmente una libreria di routing lato client. Vi permette di navigare tra le pagine senza dover ricaricare l&#8217;intera pagina. Questo avviene tramite il componente <code>&lt;Link&gt;<\/code>, che \u00e8 un involucro leggero attorno a un tag di ancoraggio standard.<\/p>\n<p>Quando fate clic su un link, Inertia intercetta il clic e vi reindirizza a XHR. In questo modo il browser non ricaricher\u00e0 la pagina, offrendo all&#8217;utente un&#8217;esperienza completa di una sola pagina.<\/p>\n<h2>Come Iniziare a Usare Inertia<\/h2>\n<figure id=\"attachment_134651\" aria-describedby=\"caption-attachment-134651\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-134651\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/kinsta-laravel-inertiajs-tutorial-1024x640.png\" alt=\"Una pagina semplice con \"Kinsta Blog\" in un banner blu in alto e una singola fila di schede di articoli di esempio.\" width=\"1024\" height=\"640\"><figcaption id=\"caption-attachment-134651\" class=\"wp-caption-text\">Una pagina di esempio realizzata con Inertia.js<\/figcaption><\/figure>\n<p>Per capire Inertia e come integrarlo con Laravel, costruiremo una web app per blog chiamata <strong>Kinsta Blog<\/strong> utilizzando la combinazione pi\u00f9 potente: Laravel per il backend, Vue.js per il frontend JavaScript e Tailwind CSS per lo styling.<\/p>\n<p>Se preferite seguire questo tutorial in un ambiente locale, potete usare <a href=\"https:\/\/kinsta.com\/it\/devkinsta\/\">DevKinsta<\/a>, un potente strumento per developer, designer e agenzie che consente di creare applicazioni web WordPress a una o pi\u00f9 pagine. Fortunatamente, WordPress pu\u00f2 essere facilmente integrato con Laravel grazie al pacchetto <a href=\"https:\/\/github.com\/corcel\/corcel\">Corcel<\/a>.<\/p>\n<h3>Prerequisiti<\/h3>\n<p>Per trarre il massimo da questo tutorial, sarebbe meglio avere:<\/p>\n<ul>\n<li>Nozioni di base di Laravel (installazione, database, migrazioni di database, Eloquent Models, controller e routing)<\/li>\n<li>Nozioni di base di Vue.js (installazione, struttura e moduli)<\/li>\n<\/ul>\n<p>Se non siete sicuri di avere tutti i requisiti, date un&#8217;occhiata a questi fantastici <a href=\"https:\/\/kinsta.com\/it\/blog\/tutorial-laravel\/\">tutorial su Laravel gratuiti e a pagamento<\/a>. Ora iniziamo.<\/p>\n<h3>Passo 1: Installare gli Elementi Principali<\/h3>\n<p>Per concentrarvi su Inertia.js e passare subito alla parte pi\u00f9 divertente, verificate di avere la seguente configurazione pronta per l&#8217;uso:<\/p>\n<ol>\n<li>Un progetto Laravel 9 appena installato e denominato <code>kinsta-blog<\/code><\/li>\n<li>Tailwind CSS CLI installato nel nostro progetto Laravel<\/li>\n<li>File immagine &#8220;kinsta-logo.png&#8221;. Scaricare e decomprimere il pacchetto di loghi Kinsta da <a href=\"https:\/\/kinsta.com\/it\/stampa\/\">https:\/\/kinsta.com\/press\/<\/a> e copiare kinsta-logo2.png nella directory public\/images come kinsta-logo.png.<\/li>\n<li>Due componenti blade in <strong>kinsta-blog\/resources\/views<\/strong> per visualizzare la homepage del blog e un singolo articolo del blog come mostrato di seguito: &#8220;\/resources\/views\/<strong>index.blade.php<\/strong>&#8220;:\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n  &lt;head&gt;\n\t&lt;meta charset=\"utf-8\" \/&gt;\n\t&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/&gt;\n\n\t&lt;title&gt;Kinsta Blog&lt;\/title&gt;\n  &lt;\/head&gt;\n\n  &lt;body&gt;\n\t&lt;header&gt;\n  \t&lt;h1&gt;Kinsta Blog&lt;\/h1&gt;\n\t&lt;\/header&gt;\n\n\t&lt;main&gt;\n  \t&lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n\n  \t&lt;section&gt;\n    \t&lt;article&gt;\n      \t&lt;div&gt;\n        \t&lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n      \t&lt;\/div&gt;\n\n      \t&lt;h3&gt;Title for the blog&lt;\/h3&gt;\n      \t&lt;p&gt;\n        \tLorem, ipsum dolor sit amet consectetur adipisicing elit. Illum rem\n        \titaque error vel perferendis aliquam numquam dignissimos, expedita\n        \tperspiciatis consectetur!\n      \t&lt;\/p&gt;\n\n      \t&lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n    \t&lt;\/article&gt;\n  \t&lt;\/section&gt;\n\t&lt;\/main&gt;\n\n\t&lt;footer&gt;\n  \t&lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n  \t&lt;input type=\"email\" \/&gt;\n\t&lt;\/footer&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>&#8220;\/resources\/views\/<strong>show.blade.php<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n  &lt;head&gt;\n\t&lt;meta charset=\"utf-8\" \/&gt;\n\t&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/&gt;\n\n\t&lt;title&gt;Kinsta Blog&lt;\/title&gt;\n  &lt;\/head&gt;\n\n  &lt;body&gt;\n\t&lt;main&gt;\n  \t&lt;article&gt;\n    \t&lt;div&gt;\n      \t&lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n    \t&lt;\/div&gt;\n\n    \t&lt;h1&gt;Title for the blog&lt;\/h1&gt;\n\n    \t&lt;p&gt;Article content goes here&lt;\/p&gt;\n  \t&lt;\/article&gt;\n\t&lt;\/main&gt;\n\n\t&lt;footer&gt;\n  \t&lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n  \t&lt;input type=\"email\" \/&gt;\n\t&lt;\/footer&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<\/li>\n<li>Database locale MySQL chiamato <code>kinsta_blog<\/code> collegato al nostro progetto:&#8221;<strong>.env<\/strong>&#8220;:\n<pre><code class=\"language-js\">DB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=kinsta_blog\nDB_USERNAME=root\nDB_PASSWORD=<\/code><\/pre>\n<\/li>\n<li>Modello di articolo, migrazioni e factory: &#8220;app\/Models\/<strong>Article.php<\/strong>&#8220;:\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppModels;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Article extends Model\n{\n\tuse HasFactory;\n\n\tprotected $fillable = ['title', 'excerpt', 'body'];\n}<\/code><\/pre>\n<p>&#8220;database\/migrations\/<strong>create_articles_table.php<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n\n\tpublic function up()\n\t{\n    \tSchema::create('articles', function (Blueprint $table) {\n        \t$table-&gt;id();\n        \t$table-&gt;string('title');\n        \t$table-&gt;text('excerpt');\n        \t$table-&gt;text('body');\n        \t$table-&gt;timestamps();\n    \t});\n\t}\n\n\tpublic function down()\n\t{\n    \tSchema::dropIfExists('articles');\n\t}\n};<\/code><\/pre>\n<p>&#8220;database\/factories\/<strong>ArticleFactory.php<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace DatabaseFactories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass ArticleFactory extends Factory\n{\n\n\tpublic function definition()\n\t{\n    \treturn [\n        \t'title' =&gt; $this-&gt;faker-&gt;sentence(6),\n        \t'excerpt' =&gt; $this-&gt;faker-&gt;paragraph(4),\n        \t'body' =&gt; $this-&gt;faker-&gt;paragraph(15),\n    \t];\n\t}\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Questo \u00e8 tutto ci\u00f2 che ci serve per iniziare! Ora passiamo al sodo e introduciamo Inertia.js nel nostro progetto.<\/p>\n<h3>Passo 2: Installare Inertia<\/h3>\n<p>Il processo di installazione di Inertia si divide in due fasi principali: lato server (Laravel) e lato client (VueJs).<\/p>\n<p>La guida ufficiale all&#8217;installazione contenuta nella documentazione di Inertia \u00e8 un po&#8217; obsoleta perch\u00e9 <a href=\"https:\/\/vitejs.dev\/guide\/#scaffolding-your-first-vite-project\">Laravel 9 ora usa Vite<\/a> per impostazione predefinita, ma ci occuperemo anche di questo.<\/p>\n<h4>1. Lato Server<\/h4>\n<p>La prima cosa da fare \u00e8 installare gli adattatori lato server di Inertia con il seguente comando da terminale tramite Composer.<\/p>\n<pre><code class=\"language-bash\">composer require inertiajs\/inertia-laravel<\/code><\/pre>\n<p>Ora configureremo il nostro modello di root, che sar\u00e0 un singolo file blade che verr\u00e0 utilizzato per caricare i file CSS e JS, oltre a una root Inertia che verr\u00e0 utilizzata per lanciare la nostra applicazione JavaScript.<\/p>\n<p>Poich\u00e9 stiamo utilizzando la versione pi\u00f9 recente di Laravel 9 v9.3.1, dobbiamo anche consentire a Vite di fare la sua magia includendolo nei nostri tag in \/resources\/views\/<strong>app.blade.php<\/strong>:<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n  &lt;head&gt;\n\t&lt;meta charset=\"utf-8\" \/&gt;\n\t&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/&gt;\n\n\t<!-- Fetch project name dynamically -->\n\t&lt;title inertia&gt;{{ config('app.name', 'Laravel') }}&lt;\/title&gt;\n\n\t<!-- Scripts -->\n\t@vite('resources\/js\/app.js') @inertiaHead\n  &lt;\/head&gt;\n\n  &lt;body class=\"font-sans antialiased\"&gt;\n\t@inertia\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Notate come siamo in grado di recuperare il titolo del progetto in modo dinamico aggiungendo l&#8217;attributo <code>inertia<\/code> ai tag <code>&lt;title&gt;<\/code>.<\/p>\n<p>Abbiamo anche aggiunto la direttiva <code>@vite<\/code> all&#8217;head per far conoscere a Vite il percorso del nostro file principale JavaScript in cui abbiamo creato la nostra applicazione e importato il nostro CSS. Vite \u00e8 uno strumento che aiuta lo sviluppo di JavaScript e CSS consentendo di visualizzare le modifiche del frontend senza dover aggiornare la pagina durante lo sviluppo locale.<\/p>\n<p>La nostra prossima mossa sar\u00e0 creare il middleware <strong>HandleInertiaRequests<\/strong> e pubblicarlo nel nostro progetto. Possiamo farlo lanciando il seguente comando da terminale nella directory principale del nostro progetto:<\/p>\n<pre><code class=\"language-bash\">php artisan inertia:middleware<\/code><\/pre>\n<p>Una volta completata questa operazione, andate in &#8220;App\/Http\/<strong>Kernel.php<\/strong>&#8221; e registrate <code>HandleInertiaRequests<\/code> come ultimo elemento dei middleware web:<\/p>\n<pre><code class=\"language-php\">'web' =&gt; [\n    \/\/ ...\n    App\\Http\\Middleware\\HandleInertiaRequests::class,\n],<\/code><\/pre>\n<h4>2. Lato Client<\/h4>\n<p>Successivamente, dobbiamo installare le dipendenze di Vue.js 3 per il frontend cos\u00ec come abbiamo fatto lato server:<\/p>\n<pre><code class=\"language-bash\">npm install @inertiajs\/inertia @inertiajs\/inertia-vue3\n\/\/ or\nyarn add @inertiajs\/inertia @inertiajs\/inertia-vue3<\/code><\/pre>\n<p>Successivamente, dovrete inserire Vue.js 3:<\/p>\n<pre><code class=\"language-bash\">npm install vue@next<\/code><\/pre>\n<p>Quindi aggiornate il vostro file JavaScript principale per inizializzare Inertia.js con Vue.js 3, Vite e Laravel:<\/p>\n<p>&#8220;resources\/js\/<strong>app.js<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-js\">import \".\/bootstrap\";\nimport \"..\/css\/app.css\";\n\nimport { createApp, h } from \"vue\";\nimport { createInertiaApp } from \"@inertiajs\/inertia-vue3\";\nimport { resolvePageComponent } from \"laravel-vite-plugin\/inertia-helpers\";\n\ncreateInertiaApp({\n  title: (title) =&gt; `${title} - ${appName}`,\n  resolve: (name) =&gt;\n\tresolvePageComponent(\n  \t`.\/Pages\/${name}.vue`,\n  \timport.meta.glob(\".\/Pages\/**\/*.vue\")\n\t),\n  setup({ el, app, props, plugin }) {\n\treturn createApp({ render: () =&gt; h(app, props) })\n  \t.use(plugin)\n  \t.mount(el);\n  },\n});<\/code><\/pre>\n<p>Nel codice che abbiamo riportato sopra, usiamo il plugin di Laravel <code>resolvePageComponent<\/code> e gli diciamo di risolvere i nostri componenti dalla directory <strong>.\/Pages\/$name.vue<\/strong>. Questo perch\u00e9 salveremo i nostri componenti Inertia in questa directory pi\u00f9 avanti nel nostro progetto e il plugin ci aiuter\u00e0 a caricare automaticamente i componenti dalla directory corretta.<\/p>\n<p>Non resta che installare <code>vitejs\/plugin-vue<\/code>:<\/p>\n<pre><code class=\"language-bash\">npm i @vitejs\/plugin-vue<\/code><\/pre>\n<p>E aggiornare il file <strong>vite.config.js<\/strong>:<\/p>\n<pre><code class=\"language-js\">import { defineConfig } from \"vite\";\nimport laravel from \"laravel-vite-plugin\";\nimport vue from \"@vitejs\/plugin-vue\";\n\nexport default defineConfig({\n  plugins: [\n\tlaravel({\n  \tinput: [\"resources\/css\/app.css\", \"resources\/js\/app.js\"],\n  \trefresh: true,\n\t}),\n\tvue({\n  \ttemplate: {\n    \ttransformAssetUrls: {\n      \tbase: null,\n      \tincludeAbsolute: false,\n    \t},\n  \t},\n\t}),\n  ],\n});<\/code><\/pre>\n<p>Il passo finale consiste nell&#8217;installare le dipendenze e compilare i file:<\/p>\n<pre><code class=\"language-bash\">npm install\n\nnpm run dev<\/code><\/pre>\n<p>E voil\u00e0! Avete ottenuto un&#8217;applicazione Laravel 9 funzionante con Vue.js 3 e Vite. Ora dobbiamo vedere qualcosa in azione!<\/p>\n<h2>Creare Pagine con Inertia<\/h2>\n<p>Vi ricordate i due file blade (<strong>index<\/strong> e <strong>show<\/strong>) per visualizzare la nostra homepage e un singolo articolo?<\/p>\n<p>L&#8217;unico file blade di cui avremo bisogno durante l&#8217;utilizzo di Inertia \u00e8 <strong>app.blade.php<\/strong>, che abbiamo gi\u00e0 usato una volta durante l&#8217;installazione di Inertia. Cosa succede ora a questi file?<\/p>\n<p>Trasformeremo questi file da componenti blade a componenti Inertia.js.<\/p>\n<p>Ogni pagina della vostra applicazione ha il suo controller e il suo componente JavaScript con Inertia. Questo vi permette di ottenere solo i dati necessari per quella pagina, senza usare un&#8217;API. Le pagine Inertia non sono altro che componenti JavaScript, nel nostro caso sono componenti Vue.js. Non hanno nulla di particolarmente degno di nota. Per questo motivo, avvolgeremo tutti i contenuti HTML tra i tag <code>&lt;template&gt;<\/code> e tutto ci\u00f2 che riguarda JavaScript sar\u00e0 avvolto dai tag <code>&lt;script&gt;<\/code>.<\/p>\n<p>Create una cartella chiamata &#8220;Pages&#8221; e spostate l\u00ec i vostri file. Quindi avremo &#8220;<strong>index.blade.php<\/strong>&#8221; e &#8220;<strong>show.blade.php<\/strong>&#8221; in &#8220;<strong>.\/resources\/js\/Pages<\/strong>&#8220;. Poi modificheremo il formato del file in &#8220;.vue&#8221; invece di &#8220;.blade.php&#8221;, rendendo la prima lettera del nome maiuscola e trasformando il contenuto in un componente standard di Vue.js. Escluderemo i tag <code>&lt;html&gt;<\/code>, <code>&lt;head&gt;<\/code> e <code>&lt;body&gt;<\/code> perch\u00e9 sono gi\u00e0 inclusi nel componente principale di blade.<\/p>\n<p>&#8220;resources\/js\/Pages\/<strong>Index.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\n  \/\/\n&lt;\/script&gt;\n\n&lt;template&gt;\n  &lt;header&gt;\n\t&lt;h1&gt;Kinsta Blog&lt;\/h1&gt;\n  &lt;\/header&gt;\n\n  &lt;main&gt;\n\t&lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n\n\t&lt;section&gt;\n  \t&lt;article&gt;\n    \t&lt;div&gt;\n      \t&lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n    \t&lt;\/div&gt;\n\n    \t&lt;h3&gt;Title for the blog&lt;\/h3&gt;\n    \t&lt;p&gt;\n      \tLorem, ipsum dolor sit amet consectetur adipisicing elit. Illum rem\n      \titaque error vel perferendis aliquam numquam dignissimos, expedita\n      \tperspiciatis consectetur!\n    \t&lt;\/p&gt;\n\n    \t&lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n  \t&lt;\/article&gt;\n\t&lt;\/section&gt;\n  &lt;\/main&gt;\n\n  &lt;footer&gt;\n\t&lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n\t&lt;input type=\"email\" \/&gt;\n  &lt;\/footer&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>&#8220;resources\/js\/Pages\/<strong>Show.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\n  \/\/\n&lt;\/script&gt;\n\n&lt;template&gt;\n  &lt;header&gt;\n\t&lt;h1&gt;Welcome to Kinsta Blog&lt;\/h1&gt;\n  &lt;\/header&gt;\n\n  &lt;main&gt;\n\t&lt;article&gt;\n  \t&lt;h1&gt;Title for the blog&lt;\/h1&gt;\n\n  \t&lt;p&gt;Article content goes here&lt;\/p&gt;\n\t&lt;\/article&gt;\n  &lt;\/main&gt;\n\n  &lt;footer&gt;\n\t&lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n\t&lt;input type=\"email\" \/&gt;\n  &lt;\/footer&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>C&#8217;\u00e8 qualcosa che ci preoccupa molto! Continuiamo a copiare e incollare l&#8217;intestazione e il footer in ogni componente, il che non \u00e8 una buona pratica. Creiamo un layout di base Inertia per memorizzare i nostri componenti persistenti.<\/p>\n<p>Create una cartella chiamata &#8220;Layouts&#8221; in &#8220;<strong>\/resources\/js&#8221;<\/strong> e all&#8217;interno della cartella create un file chiamato &#8220;KinstaLayout.vue&#8221;. Questo file conterr\u00e0 la nostra intestazione e il footer e il sito <code>main<\/code> con un <code>&lt;slot \/&gt;<\/code> per consentire a tutti i componenti che sono stati inseriti in questo layout di essere incorporati al suo interno. Questo file dovrebbe avere il seguente aspetto:<\/p>\n<p>&#8220;resources\/js\/Layouts\/<strong>KinstaLayout.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;&lt;\/script&gt;\n\n&lt;template&gt;\n\t&lt;header&gt;\n\t&lt;h1&gt;Kinsta Blog&lt;\/h1&gt;\n  &lt;\/header&gt;\n\n  &lt;main&gt;\n    \t&lt;slot \/&gt;\n  &lt;\/main&gt;\n\n  &lt;footer&gt;\n\t&lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n\t&lt;input type=\"email\" \/&gt;\n  &lt;\/footer&gt;\n\n&lt;\/template&gt;<\/code><\/pre>\n<p>Quindi importeremo questo nuovo layout nelle nostre pagine e avvolgeremo tutti i contenuti HTML con esso. I nostri componenti dovrebbero avere questo aspetto:<\/p>\n<p><strong>Index.vue<\/strong>:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n&lt;\/script&gt;\n\n&lt;template&gt;\n  &lt;KinstaLayout&gt;\n\t&lt;section&gt;\n  \t&lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n  \t&lt;article&gt;\n    \t&lt;div&gt;\n      \t&lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n    \t&lt;\/div&gt;\n\n    \t&lt;h3&gt;Title for the blog&lt;\/h3&gt;\n    \t&lt;p&gt;\n      \tLorem, ipsum dolor sit amet consectetur adipisicing elit. Illum rem\n      \titaque error vel perferendis aliquam numquam dignissimos, expedita\n      \tperspiciatis consectetur!\n    \t&lt;\/p&gt;\n\n    \t&lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n  \t&lt;\/article&gt;\n\t&lt;\/section&gt;\n  &lt;\/KinstaLayout&gt;\n &lt;\/template&gt;<\/code><\/pre>\n<p><strong>Show.vue<\/strong>:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\n import KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n&lt;\/script&gt;\n\n&lt;template&gt;\n  &lt;KinstaLayout&gt;\n\t&lt;article&gt;\n  \t&lt;h1&gt;Title for the blog&lt;\/h1&gt;\n\n  \t&lt;p&gt;Article content goes here&lt;\/p&gt;\n\t&lt;\/article&gt;\n  &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<h2>Percorsi Laravel e Render Inertia<\/h2>\n<p>Per prima cosa usiamo il file &#8220;<strong>ArticleFactory<\/strong>&#8221; che abbiamo ottenuto come punto di partenza del nostro tutorial e inseriamo alcuni articoli nel nostro database.<\/p>\n<p>&#8220;database\/seeders\/<strong>databaseSeeder.php<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Article;\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n\tpublic function run()\n\t{\n    \tArticle::factory(10)-&gt;create();\n\t}\n}<\/code><\/pre>\n<p>Quindi eseguite il seguente comando da terminale per migrare le vostre tabelle e seminare i dati simulati dalle factory:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate:fresh --seed<\/code><\/pre>\n<p>In questo modo verranno creati 10 finti articoli nel database, che dovremo passare alla nostra vista utilizzando il routing di Laravel. Ora che usiamo Inertia per il rendering delle viste, il modo in cui scrivevamo i nostri percorsi cambier\u00e0 leggermente. Creiamo il nostro primo percorso Laravel Inertia in &#8220;routes\/<strong>web.php<\/strong>&#8221; e restituiamo la vista homepage da &#8220;\/resources\/js\/Pages\/<strong>Index.vue<\/strong>&#8220;.<\/p>\n<p>&#8220;routes\/<strong>web.php<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nuse App\\Models\\Article;\nuse Illuminate\\Support\\Facades\\Route;\nuse Inertia\\Inertia;\n\nRoute::get('\/', function () {\n\treturn Inertia::render('Index', [\n    \t'articles' =&gt; Article::latest()-&gt;get()\n\t]);\n})-&gt;name('home');<\/code><\/pre>\n<p>Abbiamo importato <code>Inertia<\/code> e non abbiamo utilizzato l&#8217;helper <code>view()<\/code> di Laravel per restituire la vista, ma abbiamo invece usato <code>Inertia::render<\/code>. Inoltre, per impostazione predefinita, Inertia cercher\u00e0 il nome del file che abbiamo indicato nel nostro percorso nella cartella <strong>Pages<\/strong> in &#8220;resources\/js&#8221;.<\/p>\n<p>Andate al file Index, impostate i dati recuperati come prop e fate un ciclo su di essi con <code>v-for<\/code> per mostrare i risultati. Tra i tag dello script, definite i dati passati come prop. Tutto ci\u00f2 che Inertia deve sapere \u00e8 il tipo di dati che vi aspettate, che nel nostro caso \u00e8 un oggetto &#8220;Articolo&#8221; contenente un array di articoli.<\/p>\n<p>&#8220;resources\/js\/Pages\/<strong>Index.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n\n  defineProps({\n    articles: Object,\n  });\n&lt;\/script&gt;<\/code><\/pre>\n<p>Notate che \u00e8 sufficiente definirlo come oggetto senza restituirlo perch\u00e9 stiamo usando il formato <code>setup<\/code> per l&#8217;API di composizione di Vue.js 3. Se stiamo usando l&#8217;API di composizione di Vue.js 3, allora \u00e8 necessario definire il tipo di oggetto che ci aspettiamo. Se usassimo l&#8217;API delle opzioni, dovremmo restituirla.<\/p>\n<p>Creiamo il loop:<\/p>\n<pre><code class=\"language-html\">&lt;template&gt;\n  &lt;KinstaLayout&gt;\n\t&lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n\n\t&lt;section&gt;\n  \t\/\/ Looping over articles\n  \t&lt;article v-for=\"article in articles\":key=\"article.id\"&gt;\n    \t&lt;div&gt;\n      \t&lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n    \t&lt;\/div&gt;\n\n    \t&lt;h3&gt;{{article.title}}&lt;\/h3&gt;\n    \t&lt;p&gt;{{article.excerpt}}&lt;\/p&gt;\n\n    \t&lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n  \t&lt;\/article&gt;\n\t&lt;\/section&gt;\n  &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p><code>npm run dev<\/code> (lasciandolo in esecuzione perch\u00e9 stiamo usando Vite) e <code>php artisan serve<\/code> per avviare il server di sviluppo laravel e accedere al nostro sito web, vedremo la pagina prevista che mostra tutti i dieci articoli presenti nel database.<\/p>\n<p>Ora stiamo usando l&#8217;estensione <a href=\"https:\/\/chrome.google.com\/webstore\/detail\/vuejs-devtools\/nhdogjmejiglipccpnnnanhbledajbpd?hl=en\">Vue DevTools di Google Chrome<\/a>, che ci permette di eseguire il debug della nostra applicazione. Vediamo come vengono passati i dati al componente.<\/p>\n<figure id=\"attachment_134667\" aria-describedby=\"caption-attachment-134667\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-134667\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/inspect-Inertia-passed-data-1024x543.png\" alt=\"L'estensione Vue DevTools di Chrome mostra l'elenco delle propriet\u00e0 di Inertia per la pagina aperta.\" width=\"1024\" height=\"543\"><figcaption id=\"caption-attachment-134667\" class=\"wp-caption-text\">Ispezione delle propriet\u00e0 di Inertia.<\/figcaption><\/figure>\n<p>&#8220;articles&#8221; viene passato al componente come un oggetto prop contenente un array di articoli; ogni articolo dell&#8217;array \u00e8 anche un oggetto con propriet\u00e0 che corrispondono ai dati acquisiti dal database. Questo significa che tutti i dati che trasferiamo da Laravel a Inertia saranno trattati come oggetti prop.<\/p>\n<h2>Usare il CSS di Tailwind con Inertia.js<\/h2>\n<p>Dal momento che Tailwind \u00e8 gi\u00e0 installato nel nostro progetto al punto di partenza, tutto ci\u00f2 che dobbiamo fare \u00e8 dirgli di leggere i nostri componenti Inertia. Questo pu\u00f2 essere fatto modificando &#8220;<strong>tailwind.config.js<\/strong>&#8221; come segue:<\/p>\n<pre><code class=\"language-js\">\/** @type {import('tailwindcss').Config} *\/\nmodule.exports = {\n  content: [\n\t\".\/storage\/framework\/views\/*.php\",\n\t\".\/resources\/views\/**\/*.blade.php\",\n\t\".\/resources\/js\/**\/*.vue\",\n  ],\n  theme: {\n\textend: {},\n  },\n  plugins: [],\n};<\/code><\/pre>\n<p>Verificate poi di aver importato il nostro file CSS in &#8220;resources\/js\/<strong>app.js<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-js\">import \"..\/css\/app.css\";<\/code><\/pre>\n<p>E ora siamo pronti a creare lo stile dei nostri componenti.<\/p>\n<p>&#8220;resources\/js\/Pages\/<strong>Index.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n\n  defineProps({\n\tarticles: Object,\n  });\n&lt;\/script&gt;\n\n&lt;template&gt;\n &lt;KinstaLayout&gt;\n\t&lt;h2 class=\"text-2xl font-bold py-10\"&gt;Read our latest articles&lt;\/h2&gt;\n\n\t&lt;section class=\"space-y-5 border-b-2 pb-10\"&gt;\n  \t&lt;article\n    \tv-for=\"article in articles\"\n    \t:key=\"article.id\"\n    \tclass=\"flex justify-center items-center shadow-md bg-white rounded-xl p-4 mx-auto max-w-3xl\"\n  \t&gt;\n\n     \t&lt;img\n        \tsrc=\"\/images\/kinsta-logo.png\"\n        \tclass=\"w-32 h-32 rounded-xl object-cover\"\n        \talt=\"\"\n     \t\/&gt;\n\n    \t&lt;div class=\"flex flex-col text-left justify-between pl-3 space-y-5\"&gt;\n      \t&lt;h3\n        \tclass=\"text-xl font-semibold text-indigo-600 hover:text-indigo-800\"\n      \t&gt;\n        \t&lt;a href=\"#\"&gt;{{ article.title }}&lt;\/a&gt;\n      \t&lt;\/h3&gt;\n      \t&lt;p&gt;\n       \t{{ article.excerpt }}\n      \t&lt;\/p&gt;\n      \t&lt;a\n        \thref=\"#\"\n        \tclass=\"text-indigo-600 hover:text-indigo-800 w-fit self-end font-semibold\"\n        \t&gt;Read more&lt;\/a\n      \t&gt;\n    \t&lt;\/div&gt;\n  \t&lt;\/article&gt;\n\t&lt;\/section&gt;\n &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>&#8220;resources\/js\/Layouts\/<strong>KinstaLayout.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;&lt;\/script&gt;\n\n&lt;template&gt;\n\t&lt;header\n    \tclass=\"bg-gradient-to-r from-blue-700 via-indigo-700 to-blue-700 w-full text-center py-4\"\n\t&gt;\n    \t&lt;h1 class=\"text-white font-bold text-4xl\"&gt;Kinsta Blog&lt;\/h1&gt;\n\t&lt;\/header&gt;\n\n\t&lt;main class=\"container mx-auto text-center\"&gt;\n    \t&lt;slot \/&gt;\n\t&lt;\/main&gt;\n\n\t&lt;footer\n    \tclass=\"bg-gradient-to-b from-transparent to-gray-300 w-full text-center mt-5 py-10 mx-auto\"\n\t&gt;\n    \t&lt;h2 class=\"font-bold text-xl pb-5\"&gt;Join our Newsletter&lt;\/h2&gt;\n\n    \t&lt;input\n        \tclass=\"rounded-xl w-80 h-12 px-3 py-2 shadow-md\"\n        \ttype=\"email\"\n        \tplaceholder=\"Write your email..\"\n    \t\/&gt;\n\t&lt;\/footer&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Se guardate il browser, noterete che Vite ha gi\u00e0 aggiornato la pagina con la magia di Tailwind.<\/p>\n<figure id=\"attachment_134669\" aria-describedby=\"caption-attachment-134669\" style=\"width: 911px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-134669\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/kinsta-laravel-inertiajs-blog.gif\" alt=\"Un'immagine a scorrimento che mostra una versione funzionante del \"Blog Kinsta\" come nell\u2019esempio precedente.\" width=\"911\" height=\"620\"><figcaption id=\"caption-attachment-134669\" class=\"wp-caption-text\">Rendering delle propriet\u00e0 di Inertia.<\/figcaption><\/figure>\n<h2>Link di Inertia<\/h2>\n<p>Ora che abbiamo una homepage funzionante in grado di visualizzare tutti gli articoli del database, dobbiamo creare un altro percorso per visualizzare i singoli articoli. Creiamo un nuovo percorso e impostiamo l&#8217;URL con un carattere jolly &#8220;id&#8221;:<\/p>\n<p>&#8220;routes\/<strong>web.php<\/strong>&#8221;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nuse App\\Models\\Article;\nuse Illuminate\\Support\\Facades\\Route;\nuse Inertia\\Inertia;\n\nRoute::get('\/', function () {\n\treturn Inertia::render('Index', [\n    \t'articles' =&gt; Article::latest()-&gt;get()\n\t]);\n})-&gt;name('home');\n\nRoute::get('\/posts\/{article:id}', function (Article $article) {\n\treturn Inertia::render('Show', [\n    \t'article' =&gt; $article\n\t]);\n})-&gt;name('article.show');<\/code><\/pre>\n<p>Abbiamo importato il modello &#8220;Articolo&#8221; e aggiunto una nuova rotta per restituire il componente <strong>Show.vue<\/strong> Inertia. Abbiamo anche sfruttato <a href=\"https:\/\/laravel.com\/docs\/master\/routing#customizing-the-key\">il binding del modello di percorso di Laravel<\/a>, che permette a Laravel di ottenere automaticamente l&#8217;articolo a cui ci riferiamo.<\/p>\n<p>Ora abbiamo bisogno di un modo per visitare questo percorso cliccando su un link dalla homepage senza dover ricaricare l&#8217;intera pagina. Questo \u00e8 possibile grazie al magico strumento di Inertia <code>&lt;Link&gt;<\/code>. Nell&#8217;introduzione abbiamo detto che Inertia usa <code>&lt;Link&gt;<\/code> come involucro per un tag di ancoraggio standard <code>&lt;a&gt;<\/code>, e che questo involucro ha lo scopo di rendere le visite alla pagina il pi\u00f9 fluide possibile. In Inertia, il tag <code>&lt;Link&gt;<\/code> pu\u00f2 comportarsi come un tag di ancoraggio che esegue richieste a <code>&lt;GET&gt;<\/code>, ma pu\u00f2 anche agire come <code>&lt;button&gt;<\/code> e <code>&lt;form&gt;<\/code> allo stesso tempo. Vediamo come applicarlo al nostro progetto.<\/p>\n<p>Nel nostro Index.vue, importeremo <code>&lt;Link&gt;<\/code> da Inertia, rimuoveremo il tag di ancoraggio <code>&lt;a&gt;<\/code> e lo sostituiremo con il tag <code>&lt;Link&gt;<\/code> di Inertia. L&#8217;attributo <code>href<\/code> sar\u00e0 impostato sull&#8217;URL del percorso che abbiamo creato in precedenza per visualizzare l&#8217;articolo:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\nimport { Link } from \"@inertiajs\/inertia-vue3\";\n\ndefineProps({\n\tarticles: Object,\n});\n&lt;\/script&gt;\n\n&lt;template&gt;\n\t&lt;KinstaLayout&gt;\n    \t&lt;section class=\"space-y-5 border-b-2 pb-10\"&gt;\n        \t&lt;h2 class=\"text-2xl font-bold pt-10 mx-auto text-center\"&gt;\n            \tRead our latest articles\n        \t&lt;\/h2&gt;\n\n        \t&lt;article\n            \tv-for=\"article in articles\"\n            \t:key=\"article.id\"\n            \tclass=\"flex justify-center items-center shadow-md bg-white rounded-xl p-4 mx-auto max-w-3xl\"\n        \t&gt;\n            \t&lt;img\n                \tsrc=\"\/images\/kinsta-logo.png\"\n                \tclass=\"w-32 h-32 rounded-xl object-cover\"\n                \talt=\"\"\n            \t\/&gt;\n\n            \t&lt;div\n                \tclass=\"flex flex-col text-left justify-between pl-3 space-y-5\"\n            \t&gt;\n                \t&lt;h3\n                    \tclass=\"text-xl font-semibold text-indigo-600 hover:text-indigo-800\"\n                \t&gt;\n                    \t&lt;Link :href=\"'\/posts\/' + article.id\"&gt;{{\n                        \tarticle.title\n                    \t}}&lt;\/Link&gt;\n                \t&lt;\/h3&gt;\n                \t&lt;p&gt;\n                    \t{{ article.excerpt }}\n                \t&lt;\/p&gt;\n                \t&lt;Link\n                    \t:href=\"'\/posts\/' + article.id\"\n                    \tclass=\"text-indigo-600 hover:text-indigo-800 w-fit self-end font-semibold\"\n                    \t&gt;Read more\n                \t&lt;\/Link&gt;\n            \t&lt;\/div&gt;\n        \t&lt;\/article&gt;\n    \t&lt;\/section&gt;\n\t&lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Modifichiamo <strong>Show.vue<\/strong> con Tailwind per farlo apparire un po&#8217; pi\u00f9 elegante e pronto per la nostra visita. Inoltre, dobbiamo fargli sapere che deve aspettarsi un oggetto &#8220;Article&#8221; e impostarlo come prop:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n\ndefineProps({\n\tarticle: Object,\n});\n&lt;\/script&gt;\n\n&lt;template&gt;\n\t&lt;KinstaLayout&gt;\n    \t&lt;article class=\"mx-auto mt-10 flex justify-center max-w-5xl border-b-2\"&gt;\n        \t&lt;img\n            \tsrc=\"\/images\/kinsta-logo.png\"\n            \tclass=\"w-80 h-80 rounded-xl mx-auto py-5\"\n            \talt=\"\"\n        \t\/&gt;\n        \t&lt;div class=\"text-left flex flex-col pt-5 pb-10 px-10\"&gt;\n            \t&lt;h1 class=\"text-xl font-semibold mb-10\"&gt;{{ article.title }}&lt;\/h1&gt;\n            \t&lt;p&gt;{{ article.body }}&lt;\/p&gt;\n        \t&lt;\/div&gt;\n    \t&lt;\/article&gt;\n\t&lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Ora, quando clicchiamo sul titolo dell&#8217;articolo o su &#8220;Read more&#8221;, verremo magicamente trasportati a <strong>Show.vue<\/strong> senza dover aggiornare la pagina.<\/p>\n<figure id=\"attachment_134671\" aria-describedby=\"caption-attachment-134671\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-134671\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/kinsta-laravel-inertiajs-Link-1024x596.gif\" alt=\"La pagina di esempio \"Blog Kinsta\" che mostra le schede degli articoli con i link funzionanti.\" width=\"1024\" height=\"596\"><figcaption id=\"caption-attachment-134671\" class=\"wp-caption-text\">I link di Inertia sono al loro posto.<\/figcaption><\/figure>\n<p>Nel nostro caso, stiamo usando <code>&lt;Link&gt;<\/code> come tag di ancoraggio che invia una richiesta <code>GET<\/code> al percorso e restituisce i nuovi dati, ma possiamo usare <code>&lt;Link&gt;<\/code> anche per <code>POST<\/code>, <code>PUT<\/code>, <code>PATCH<\/code> e <code>DELETE<\/code><\/p>\n<p>&#8220;routes\/<strong>web.php<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;Link href=\"\/logout\" method=\"post\" as=\"button\" type=\"button\"&gt;Logout&lt;\/Link&gt;<\/code><\/pre>\n<h2>Suggerimenti e Trucchi su Laravel Inertia Che Dovresti Conoscere<\/h2>\n<p>Ora abbiamo una SPA funzionante costruita con Laravel, Inertia e Tailwind CSS. Ma Inertia pu\u00f2 aiutarci a ottenere molto altro. \u00c8 il momento di acquisire alcune tecniche di Inertia che aiuteranno sia chi sviluppa sia chi visita l&#8217;applicazione.<\/p>\n<h3>Generare URL<\/h3>\n<p>Avrete notato che abbiamo aggiunto nomi ai nostri percorsi Laravel senza usarli. Inertia ci permette di usare le nostre rotte con nome all&#8217;interno dei nostri componenti invece di scrivere manualmente il percorso completo.<\/p>\n<p>Possiamo ottenere questo risultato <a href=\"https:\/\/github.com\/tighten\/ziggy#installation\">installando il pacchetto Ziggy<\/a> nel nostro progetto:<\/p>\n<pre><code class=\"language-bash\">composer require tightenco\/ziggy<\/code><\/pre>\n<p>Quindi andate su &#8220;resources\/js\/app.js&#8221; e aggiornatelo in questo modo:<\/p>\n<pre><code class=\"language-js\">import \".\/bootstrap\";\nimport \"..\/css\/app.css\";\n\nimport { createApp, h } from \"vue\";\nimport { createInertiaApp } from \"@inertiajs\/inertia-vue3\";\nimport { resolvePageComponent } from \"laravel-vite-plugin\/inertia-helpers\";\nimport { ZiggyVue } from \"..\/..\/vendor\/tightenco\/ziggy\/dist\/vue.m\";\n\ncreateInertiaApp({\n\ttitle: (title) =&gt; `${title} - ${appName}`,\n\tresolve: (name) =&gt;\n    \tresolvePageComponent(\n        \t`.\/Pages\/${name}.vue`,\n        \timport.meta.glob(\".\/Pages\/**\/*.vue\")\n    \t),\n\tsetup({ el, app, props, plugin }) {\n    \treturn createApp({ render: () =&gt; h(app, props) })\n        \t.use(plugin)\n        \t.use(ZiggyVue, Ziggy)\n        \t.mount(el);\n\t},\n});<\/code><\/pre>\n<p>Andate a &#8220;\/resources\/views\/<strong>app.blade.php<\/strong>&#8221; e aggiornate l&#8217;head con la direttiva <code>@routes<\/code>:<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n\n&lt;head&gt;\n\t&lt;meta charset=\"utf-8\"&gt;\n\t&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n\n\t<!-- Fetch project name dynamically -->\n\t&lt;title inertia&gt;{{ config('app.name', 'Laravel') }}&lt;\/title&gt;\n\n\t<!-- Scripts -->\n\t@routes\n\t@vite('resources\/js\/app.js')\n\t@inertiaHead\n&lt;\/head&gt;\n\n&lt;body class=\"font-sans antialiased\"&gt;\n\t@inertia\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/code><\/pre>\n<p>&#8230;e aggiornate i pacchetti NPM con i due comandi da terminale che seguono:<\/p>\n<pre><code class=\"language-bash\">npm install && npm run dev<\/code><\/pre>\n<p>Questo pacchetto ci permette di usare i percorsi con nome all&#8217;interno dei nostri componenti Inertia, quindi andiamo su <strong>Index.vue<\/strong> e rimuoviamo il vecchio percorso manuale sostituendolo con il nome del percorso e passando i dati normalmente, come se fossimo nel nostro controller.<\/p>\n<p>Sostituiamo questo:<\/p>\n<pre><code class=\"language-html\">&lt;Link :href=\"'\/posts\/' + article.id\"&gt;\n   {{ article.title }}\n&lt;\/Link&gt;<\/code><\/pre>\n<p>&#8230; con questo:<\/p>\n<pre><code class=\"language-html\">&lt;Link :href=\"route('article.show', article.id)\"&gt;\n   {{ article.title }}\n&lt;\/Link&gt;<\/code><\/pre>\n<p>In questo modo otterremo lo stesso comportamento che avevamo prima, ma ora \u00e8 pi\u00f9 facile per chi sviluppa ed \u00e8 estremamente utile quando il percorso prevede molti parametri.<\/p>\n<h3>Indicatori di Progresso<\/h3>\n<p>Questa \u00e8 una delle caratteristiche pi\u00f9 belle di Inertia.js; poich\u00e9 la SPA offre un&#8217;esperienza interattiva all&#8217;utente, avere un feedback costante sul caricamento di una richiesta sarebbe un&#8217;aggiunta fantastica all&#8217;applicazione. Questo pu\u00f2 essere realizzato con una libreria separata offerta da Inertia.<\/p>\n<p>La libreria &#8220;@inertiajs\/progress&#8221; \u00e8 un wrapper attorno a <a href=\"https:\/\/ricostacruz.com\/nprogress\/\">NProgress<\/a> che mostra in modo condizionato gli indicatori di caricamento in base agli eventi di Inertia. Non \u00e8 necessario sapere come funziona dietro le quinte, quindi vediamo di farla funzionare.<\/p>\n<p>Possiamo installare questa libreria con il seguente comando da terminale:<\/p>\n<pre><code class=\"language-bash\">npm install @inertiajs\/progress<\/code><\/pre>\n<p>Una volta installata, dobbiamo importarla in &#8220;<strong>resources\/js\/app.js<\/strong>&#8221;<\/p>\n<pre><code class=\"language-js\">import \".\/bootstrap\";\nimport \"..\/css\/app.css\";\n\nimport { createApp, h } from \"vue\";\nimport { createInertiaApp } from \"@inertiajs\/inertia-vue3\";\nimport { resolvePageComponent } from \"laravel-vite-plugin\/inertia-helpers\";\nimport { ZiggyVue } from \"..\/..\/vendor\/tightenco\/ziggy\/dist\/vue.m\";\nimport { InertiaProgress } from \"@inertiajs\/progress\";\n\ncreateInertiaApp({\n\ttitle: (title) =&gt; `${title} - ${appName}`,\n\tresolve: (name) =&gt;\n    \tresolvePageComponent(\n        \t`.\/Pages\/${name}.vue`,\n        \timport.meta.glob(\".\/Pages\/**\/*.vue\")\n    \t),\n\tsetup({ el, app, props, plugin }) {\n    \treturn createApp({ render: () =&gt; h(app, props) })\n        \t.use(plugin)\n        \t.use(ZiggyVue, Ziggy)\n        \t.mount(el);\n\t},\n});\n\nInertiaProgress.init({ color: \"#000000\", showSpinner: true });<\/code><\/pre>\n<p>Questo mostrer\u00e0 una barra di caricamento e uno spinner di caricamento di colore nero, ma possiamo cambiare il colore e altre opzioni utili che si trovano nella <a href=\"https:\/\/inertiajs.com\/progress-indicators\">documentazione dell&#8217;indicatore di avanzamento di Inertia.js<\/a>.<\/p>\n<figure id=\"attachment_134672\" aria-describedby=\"caption-attachment-134672\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-134672\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Inertia-progress-indicator-1024x83.gif\" alt=\"L'intestazione blu del \"Blog di Kinsta\" con l'indicatore di avanzamento in alto a destra.\" width=\"1024\" height=\"83\"><figcaption id=\"caption-attachment-134672\" class=\"wp-caption-text\">L&#8217;indicatore di avanzamento di Inertia (in alto a destra).<\/figcaption><\/figure>\n<h3>Gestione dello Scorrimento<\/h3>\n<p>In alcuni casi, potreste voler navigare verso una nuova pagina mantenendo la stessa posizione di scorrimento. Forse ne avrete bisogno se permettete agli utenti di lasciare dei commenti; questo invier\u00e0 un modulo e caricher\u00e0 il nuovo commento dal database al vostro componente; vorrete che questo avvenga senza che l&#8217;utente perda la posizione di scorrimento. Inertia si occupa di questo.<\/p>\n<p>Nel nostro caso, applichiamola al tag <code>&lt;Link&gt;<\/code> in <strong>Index.vue<\/strong>. Per mantenere la posizione di scorrimento durante il reindirizzamento a un&#8217;altra pagina con <code>&lt;Link&gt;<\/code> di Inertia, basta aggiungere l&#8217;attributo <code>preserve-scroll<\/code> al tag <code>&lt;Link&gt;<\/code>:<\/p>\n<pre><code class=\"language-html\">&lt;Link :href=\"route('article.show', article.id)\" preserve-scroll&gt;\n  {{ article.title }}\n&lt;\/Link&gt;<\/code><\/pre>\n<h2>Suggerimenti SEO<\/h2>\n<p>Sin dalla nascita delle SPA, le persone si sono preoccupate dell&#8217;ottimizzazione per i motori di ricerca (SEO). \u00c8 risaputo che se usate l&#8217;approccio SPA, i motori di ricerca avranno difficolt\u00e0 a scansionare la vostra applicazione web perch\u00e9 tutto \u00e8 renderizzato lato client, con il risultato che il vostro sito web non compare in cima ai risultati di ricerca; tuttavia, come mai piattaforme popolari come Facebook e Github sono diventate SPA e continuano a ottenere buoni risultati in termini di SEO?<\/p>\n<p>Beh, questa non \u00e8 pi\u00f9 una missione impossibile. Inertia offre alcune soluzioni per aiutare la vostra SPA a diventare SEO friendly.<\/p>\n<h3>Inertia Vue SSR con Laravel e Vite<\/h3>\n<p>I motori di ricerca cercano sempre l&#8217;HTML sul vostro sito web per identificarne il contenuto; tuttavia, se non avete l&#8217;HTML negli URL, questo lavoro diventa pi\u00f9 difficile. Quando sviluppate una SPA, tutto ci\u00f2 che avete sulla vostra pagina \u00e8 JavaScript e JSON. Inertia ha introdotto una funzione di Server-Side Rendering (SSR) che potete aggiungere alla vostra applicazione. Questa funzione permette alla vostra applicazione di pre-renderizzare una pagina iniziale visitata sul server e poi di inviare l&#8217;HTML renderizzato al browser. In questo modo gli utenti possono vedere e interagire con le vostre pagine prima che vengano caricate completamente, oltre ad avere altri vantaggi, come la riduzione del tempo necessario ai motori di ricerca per indicizzare il vostro sito.<\/p>\n<p>Per riassumere il funzionamento, Inertia identifica se \u00e8 in esecuzione su un server Node.js e renderizza in HTML i nomi dei componenti, le propriet\u00e0, l&#8217;URL e la versione delle risorse. In questo modo l&#8217;utente e il motore di ricerca avranno a disposizione praticamente tutto ci\u00f2 che la vostra pagina ha da offrire.<\/p>\n<p>Tuttavia, trattandosi di Laravel, questo non ha molto senso perch\u00e9 Laravel \u00e8 un framework PHP e non gira su un server Node.js. Pertanto, inoltreremo la richiesta a un servizio Node.js, che eseguir\u00e0 il rendering della pagina e restituir\u00e0 l&#8217;HTML. In questo modo la nostra applicazione Laravel Vue sar\u00e0 SEO-friendly di default.<\/p>\n<p>Per prima cosa, dobbiamo installare il pacchetto npm Vue.js SSR:<\/p>\n<pre><code class=\"language-bash\">npm install @vue\/server-renderer<\/code><\/pre>\n<p>Un altro utile pacchetto &#8220;NPM&#8221; di Inertia fornisce un semplice server &#8220;HTTP&#8221;. Vi consigliamo vivamente di installarlo:<\/p>\n<pre><code class=\"language-bash\">npm install @inertiajs\/server<\/code><\/pre>\n<p>Poi, in &#8220;resources\/js\/&#8221;, aggiungeremo un nuovo file chiamato <strong>ssr.js<\/strong>. Questo file sar\u00e0 molto simile al file <strong>app.js<\/strong> che abbiamo creato durante l&#8217;installazione di Inertia, solo che verr\u00e0 eseguito in Node.js e non nel browser:<\/p>\n<pre><code class=\"language-js\">import { createSSRApp, h } from \"vue\";\nimport { renderToString } from \"@vue\/server-renderer\";\nimport { createInertiaApp } from \"@inertiajs\/inertia-vue3\";\nimport createServer from \"@inertiajs\/server\";\nimport { resolvePageComponent } from \"laravel-vite-plugin\/inertia-helpers\";\nimport { ZiggyVue } from \"..\/..\/vendor\/tightenco\/ziggy\/dist\/vue.m\";\n\nconst appName = \"Laravel\";\n\ncreateServer((page) =&gt;\n\tcreateInertiaApp({\n    \tpage,\n    \trender: renderToString,\n    \ttitle: (title) =&gt; `${title} - ${appName}`,\n    \tresolve: (name) =&gt;\n        \tresolvePageComponent(\n            \t`.\/Pages\/${name}.vue`,\n            \timport.meta.glob(\".\/Pages\/**\/*.vue\")\n        \t),\n    \tsetup({ app, props, plugin }) {\n        \treturn createSSRApp({ render: () =&gt; h(app, props) })\n            \t.use(plugin)\n            \t.use(ZiggyVue, {\n                \t...page.props.ziggy,\n                \tlocation: new URL(page.props.ziggy.location),\n            \t});\n    \t},\n\t})\n);<\/code><\/pre>\n<p>Verificate di non includere tutto nel file <strong>ssr.js<\/strong> perch\u00e9 non sar\u00e0 visibile ai visitatori; questo file serve solo ai motori di ricerca e ai browser per mostrare i dati all&#8217;interno della vostra pagina, quindi includete solo ci\u00f2 che \u00e8 importante per i vostri dati o solo ci\u00f2 che li render\u00e0 disponibili.<\/p>\n<p>&#8220;Per impostazione predefinita, il server SSR di Inertia opera sulla porta 13714. Tuttavia, potete cambiare questa impostazione fornendo un secondo argomento al metodo createServer&#8221;, si legge su Inertia DOCs.<\/p>\n<p>I DOC di Inertia.js non spiegano come integrare l&#8217;SSR di Inertia con Vite, ma lo faremo ora. Andate su <strong>vite.config.js<\/strong> e incollate quanto segue:<\/p>\n<pre><code class=\"language-js\">import { defineConfig } from \"vite\";\nimport laravel from \"laravel-vite-plugin\";\nimport vue from \"@vitejs\/plugin-vue\";\n\nexport default defineConfig({\n\tplugins: [\n    \tlaravel({\n        \tinput: \"resources\/js\/app.js\",\n        \tssr: \"resources\/js\/ssr.js\",\n    \t}),\n    \tvue({\n        \ttemplate: {\n            \ttransformAssetUrls: {\n                \tbase: null,\n                \tincludeAbsolute: false,\n            \t},\n        \t},\n    \t}),\n\t],\n});<\/code><\/pre>\n<p>Successivamente, andate al file <strong>package.json<\/strong> e modificate lo script di compilazione:<\/p>\n<pre><code class=\"language-json\">\"build\": \"vite build && vite build --ssr\"<\/code><\/pre>\n<p>Ora se eseguiamo <code>npm run build<\/code>, Vite costruir\u00e0 il nostro bundle SSR per la produzione. Per maggiori informazioni su questo argomento, potete visitare i <a href=\"https:\/\/inertiajs.com\/server-side-rendering\">DOC di Inertia SSR<\/a> e i <a href=\"https:\/\/laravel-vite.dev\/guide\/features\/ssr.html#building\">DOC di Vite SSR<\/a>.<\/p>\n<h3>Titolo e Meta<\/h3>\n<p>Poich\u00e9 le applicazioni JavaScript vengono rese all&#8217;interno del documento <code>&lt;body&gt;<\/code>, non possono rendere il markup del documento <code>&lt;head&gt;<\/code> perch\u00e9 non rientra nel loro ambito. Inertia dispone di un componente <code>&lt;Head&gt;<\/code> che pu\u00f2 essere utilizzato per impostare i tag <code>&lt;title&gt;<\/code>, <code>&lt;meta&gt;<\/code> e altri componenti <code>&lt;head&gt;<\/code> della pagina.<\/p>\n<p>Per aggiungere l&#8217;elemento <code>&lt;head&gt;<\/code> alla vostra pagina, dobbiamo importare <code>&lt;Head&gt;<\/code> da Inertia come abbiamo fatto per il componente <code>&lt;Link&gt;<\/code>:<\/p>\n<pre><code class=\"language-js\">import { Head } from '@inertiajs\/inertia-vue3'\n\n&lt;Head&gt;\n  &lt;title&gt;Kinsta Blog&lt;\/title&gt;\n  &lt;meta name=\"description\" content=\"Kinsta blog for developers\"&gt;\n&lt;\/Head&gt;<\/code><\/pre>\n<p>Possiamo anche aggiungere un titolo globale per tutte le pagine, in modo da aggiungere il nome della vostra applicazione accanto al titolo di ogni pagina. Lo abbiamo gi\u00e0 fatto nel file <strong>app.js<\/strong>:<\/p>\n<pre><code class=\"language-js\">createInertiaApp({\n\ttitle: (title) =&gt; `${title} - ${appName}`,\n\t\/\/\n});<\/code><\/pre>\n<p>Ci\u00f2 significa che se aggiungiamo <code>&lt;Head title=\"Home\"&gt;<\/code> alla homepage della nostra applicazione con un titolo, questo verr\u00e0 visualizzato in questo modo: <code>&lt;title&gt;Home - My App&lt;\/title&gt;<\/code>.<\/p>\n<h3>Monitoraggio dell&#8217;Applicazione<\/h3>\n<p>La velocit\u00e0 \u00e8 uno dei fattori pi\u00f9 importanti per ottimizzare le prestazioni SEO del vostro sito web. Se usate WordPress per il vostro sito web, <a href=\"https:\/\/kinsta.com\/it\/strumento-apm\/\">Kinsta APM<\/a> vi aiuter\u00e0 a monitorare e a tenere sotto controllo la vostra applicazione. Questo vi aiuta a identificare i problemi di prestazioni di WordPress ed \u00e8 disponibile gratuitamente su tutti i siti ospitati da Kinsta.<\/p>\n<h2>Riepilogo<\/h2>\n<p>Inertia.js \u00e8 una delle tecnologie pi\u00f9 significative disponibili; unitela a Laravel e avrete una moderna applicazione Single-Page costruita con PHP e JavaScript. Taylor Otwell, il creatore di Laravel, \u00e8 talmente interessato a Inertia che Laravel ha lanciato i suoi starter kit pi\u00f9 popolari, Laravel Breeze e Jetstream, con il supporto di Inertia e SSR.<br \/>\n<\/p>\n<p>Se siete fan di Laravel o lavorate nello sviluppo, Inertia.js attirer\u00e0 senza dubbio la vostra attenzione. In questo tutorial abbiamo realizzato un blog molto semplice e basilare in pochi minuti. C&#8217;\u00e8 ancora molto da imparare su Inertia e questo potrebbe essere solo il primo di molti articoli e tutorial.<\/p>\n<p>Quali altri aspetti di Laravel vorreste che esplorassimo? Fatecelo sapere nella sezione commenti qui sotto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le applicazioni multi-pagina (MPA) stanno diventando sempre meno popolari. Piattaforme famose come Facebook, Twitter, YouTube, Github e molte altre usano gi\u00e0 la tecnologia delle applicazioni a &#8230;<\/p>\n","protected":false},"author":266,"featured_media":62850,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[26137,26117,25648,25528,26136],"topic":[26020],"class_list":["post-62755","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-framework-php","tag-inertia-js","tag-javascript","tag-laravel","tag-spa","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Come Usare Inertia.js nei Tuoi Progetti Laravel<\/title>\n<meta name=\"description\" content=\"In questo articolo vedremo come usare Inertia.js insieme a Laravel, Vue e Tailwind CSS per creare un&#039;applicazione web moderna.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come Usare Inertia.js nei Tuoi Progetti Laravel\" \/>\n<meta property=\"og:description\" content=\"In questo articolo vedremo come usare Inertia.js insieme a Laravel, Vue e Tailwind CSS per creare un&#039;applicazione web moderna.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-12T15:18:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-07T13:53:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mostafa Said\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"In questo articolo vedremo come usare Inertia.js insieme a Laravel, Vue e Tailwind CSS per creare un&#039;applicazione web moderna.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mostafa Said\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"31 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/\"},\"author\":{\"name\":\"Mostafa Said\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996\"},\"headline\":\"Come Usare Inertia.js nei Tuoi Progetti Laravel\",\"datePublished\":\"2022-12-12T15:18:25+00:00\",\"dateModified\":\"2023-05-07T13:53:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/\"},\"wordCount\":3868,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png\",\"keywords\":[\"framework php\",\"inertia.js\",\"JavaScript\",\"laravel\",\"spa\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/\",\"name\":\"Come Usare Inertia.js nei Tuoi Progetti Laravel\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png\",\"datePublished\":\"2022-12-12T15:18:25+00:00\",\"dateModified\":\"2023-05-07T13:53:08+00:00\",\"description\":\"In questo articolo vedremo come usare Inertia.js insieme a Laravel, Vue e Tailwind CSS per creare un'applicazione web moderna.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png\",\"width\":1460,\"height\":730,\"caption\":\"Come Usare Inertia.js nei Tuoi Progetti Laravel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Come Usare Inertia.js nei Tuoi Progetti Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996\",\"name\":\"Mostafa Said\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g\",\"caption\":\"Mostafa Said\"},\"description\":\"I\u2019m Mostafa, a full-stack developer with a knack for all things Laravel, Inertia, and JavaScript frameworks. When I'm not coding, you can find me sharing my knowledge through tutorials, diving into hackathons (and winning a few), and spreading the love for tech by teaching what I've learned.\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/mostafasaid\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Come Usare Inertia.js nei Tuoi Progetti Laravel","description":"In questo articolo vedremo come usare Inertia.js insieme a Laravel, Vue e Tailwind CSS per creare un'applicazione web moderna.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/","og_locale":"it_IT","og_type":"article","og_title":"Come Usare Inertia.js nei Tuoi Progetti Laravel","og_description":"In questo articolo vedremo come usare Inertia.js insieme a Laravel, Vue e Tailwind CSS per creare un'applicazione web moderna.","og_url":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2022-12-12T15:18:25+00:00","article_modified_time":"2023-05-07T13:53:08+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png","type":"image\/png"}],"author":"Mostafa Said","twitter_card":"summary_large_image","twitter_description":"In questo articolo vedremo come usare Inertia.js insieme a Laravel, Vue e Tailwind CSS per creare un'applicazione web moderna.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Mostafa Said","Tempo di lettura stimato":"31 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/"},"author":{"name":"Mostafa Said","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996"},"headline":"Come Usare Inertia.js nei Tuoi Progetti Laravel","datePublished":"2022-12-12T15:18:25+00:00","dateModified":"2023-05-07T13:53:08+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/"},"wordCount":3868,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png","keywords":["framework php","inertia.js","JavaScript","laravel","spa"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/","url":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/","name":"Come Usare Inertia.js nei Tuoi Progetti Laravel","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png","datePublished":"2022-12-12T15:18:25+00:00","dateModified":"2023-05-07T13:53:08+00:00","description":"In questo articolo vedremo come usare Inertia.js insieme a Laravel, Vue e Tailwind CSS per creare un'applicazione web moderna.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/12\/laravel-inertia-1.png","width":1460,"height":730,"caption":"Come Usare Inertia.js nei Tuoi Progetti Laravel"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/it\/argomenti\/laravel\/"},{"@type":"ListItem","position":3,"name":"Come Usare Inertia.js nei Tuoi Progetti Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996","name":"Mostafa Said","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g","caption":"Mostafa Said"},"description":"I\u2019m Mostafa, a full-stack developer with a knack for all things Laravel, Inertia, and JavaScript frameworks. When I'm not coding, you can find me sharing my knowledge through tutorials, diving into hackathons (and winning a few), and spreading the love for tech by teaching what I've learned.","url":"https:\/\/kinsta.com\/it\/blog\/author\/mostafasaid\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/62755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/266"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=62755"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/62755\/revisions"}],"predecessor-version":[{"id":68606,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/62755\/revisions\/68606"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/translations\/dk"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62755\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/62850"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=62755"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=62755"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=62755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}