{"id":64407,"date":"2022-12-12T16:18:04","date_gmt":"2022-12-12T15:18:04","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=64407&#038;preview=true&#038;preview_id=64407"},"modified":"2023-11-03T03:21:04","modified_gmt":"2023-11-03T02:21:04","slug":"inertia-laravel","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/","title":{"rendered":"Comment utiliser Inertia.js dans vos projets Laravel"},"content":{"rendered":"<p>Les applications multi-pages (Multi-Page-Applications ou MPA) perdent de leur popularit\u00e9 de jour en jour. Des plateformes c\u00e9l\u00e8bres comme Facebook, Twitter, YouTube, Github et bien d&rsquo;autres utilisent d\u00e9j\u00e0 la technologie des applications mono-pages (Single-Page-Application ou SPA) \u00e0 la place.<\/p>\n<p>Cette technologie \u00e0 la mode permet aux utilisateurs de s&rsquo;engager avec les applications web de mani\u00e8re rapide et r\u00e9active car tout est rendu c\u00f4t\u00e9 client. Cependant, elle peut s&rsquo;av\u00e9rer p\u00e9nible pour les d\u00e9veloppeurs qui construisent des applications rendues c\u00f4t\u00e9 serveur avec des frameworks comme Laravel ou Django.<\/p>\n<p>Heureusement, Inertia.js est intervenu et est venu \u00e0 la rescousse.<br \/>\n<\/p>\n<p>Dans cet article, nous allons vous montrer comment vous pouvez commencer \u00e0 utiliser Inertia.js et comment l&rsquo;utiliser avec Laravel, Vue.js et Tailwind CSS pour cr\u00e9er une application web de blog moderne. Nous partagerons \u00e9galement la fa\u00e7on de rendre les SPA plus conviviales pour le SEO, ainsi que quelques autres astuces.<\/p>\n<p>Si vous d\u00e9butez avec Laravel, nous vous recommandons de lire <a href=\"https:\/\/kinsta.com\/fr\/blog\/developpeur-laravel\/\">d&rsquo;abord cet article<\/a> pour \u00eatre pr\u00eat \u00e0 d\u00e9marrer.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Pourquoi SPA ?<\/h2>\n<p>Avant de demander pourquoi nous devrions utiliser Inertia, nous devons d&rsquo;abord nous demander : \u00ab Pourquoi SPA ? \u00bb<\/p>\n<p>Pourquoi pr\u00e9f\u00e9rerait-on les applications rendues c\u00f4t\u00e9 client aux applications traditionnelles c\u00f4t\u00e9 serveur ? Qu&rsquo;est-ce qui forcerait un d\u00e9veloppeur Laravel full-stack \u00e0 dire adieu aux <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-laravel\/#templating\">blade componets<\/a> ?<\/p>\n<p>La r\u00e9ponse courte : parce que la vitesse et la r\u00e9activit\u00e9 sont essentielles \u00e0 tout engagement r\u00e9ussi de l&rsquo;utilisateur.<\/p>\n<p>Dans le cas des AMP, le navigateur envoie constamment des requ\u00eates au backend, qui ex\u00e9cute ensuite de nombreuses requ\u00eates de base de donn\u00e9es. Une fois que la base de donn\u00e9es et le serveur ont trait\u00e9 les requ\u00eates et les ont transmises au navigateur, la page est rendue.<\/p>\n<p>Mais les SPA sont diff\u00e9rents. L&rsquo;application apporte tout ce dont l&rsquo;utilisateur a besoin directement sur la page, \u00e9liminant ainsi la n\u00e9cessit\u00e9 pour le navigateur d&rsquo;envoyer des requ\u00eates ou de recharger la page pour rendre de nouveaux \u00e9l\u00e9ments HTML.<\/p>\n<p>En raison de cette exp\u00e9rience utilisateur unique, de nombreuses entreprises de renom r\u00e9clament que leurs sites web deviennent des applications \u00e0 page unique.<\/p>\n<p>Cela dit, la cr\u00e9ation d&rsquo;une application \u00e0 page unique peut \u00eatre difficile pour les d\u00e9veloppeurs Laravel, car elle les obligerait \u00e0 commencer \u00e0 utiliser Vue.js ou React au lieu des mod\u00e8les de lame, ce qui entrainerait la perte de nombreux joyaux Laravel qui permettent d&rsquo;\u00e9conomiser du temps et des efforts.<\/p>\n<p>Mais maintenant que nous avons Inertia.js, tout cela a chang\u00e9.<\/p>\n<h2>Pourquoi Inertia ?<\/h2>\n<p>Si les d\u00e9veloppeurs Laravel devaient construire des SPA web avec Vue avant Inertia, ils devaient configurer des API et renvoyer des donn\u00e9es JSON avec Laravel, puis utiliser quelque chose comme AXIOS pour r\u00e9cup\u00e9rer les donn\u00e9es dans les composants Vue. Ils auraient \u00e9galement besoin de quelque chose comme Vue Router pour g\u00e9rer les routes, ce qui signifierait perdre le routage Laravel, ainsi que les middlewares et les contr\u00f4leurs.<\/p>\n<p>Inertia.js, en revanche, permet aux d\u00e9veloppeurs de construire des applications modernes \u00e0 page unique Vue, React et Svelte en utilisant un routage et des contr\u00f4leurs classiques c\u00f4t\u00e9 serveur. Inertia a \u00e9t\u00e9 con\u00e7u pour les d\u00e9veloppeurs de Laravel, Ruby on Rails et Django afin de leur permettre de cr\u00e9er des applications sans modifier leurs techniques de codage consistant \u00e0 cr\u00e9er des contr\u00f4leurs, \u00e0 extraire des donn\u00e9es d&rsquo;une base de donn\u00e9es et \u00e0 rendre des vues<\/p>\n<p>Gr\u00e2ce \u00e0 Inertia.js, les d\u00e9veloppeurs Laravel se sentiront comme chez eux.<\/p>\n<h2>Comment fonctionne Inertia ?<\/h2>\n<p>Construire un SPA uniquement avec Laravel et Vue vous donnera une page JavaScript compl\u00e8te pour votre interface publique, mais cela ne vous fournira pas une exp\u00e9rience d&rsquo;application \u00e0 page unique. Chaque lien cliqu\u00e9 entrainera le red\u00e9marrage de votre framework c\u00f4t\u00e9 client au chargement de la page suivante.<\/p>\n<p>C&rsquo;est l\u00e0 qu&rsquo;Inertia entre en jeu.<\/p>\n<p>Inertia est essentiellement une biblioth\u00e8que de routage c\u00f4t\u00e9 client. Elle vous permet de naviguer entre les pages sans avoir \u00e0 recharger la page enti\u00e8re. Ceci est r\u00e9alis\u00e9 par le biais du composant <code>&lt;Link&gt;<\/code>, qui est une enveloppe l\u00e9g\u00e8re autour d&rsquo;une balise d&rsquo;ancrage standard.<\/p>\n<p>Lorsque vous cliquez sur un lien Inertia, Inertia intercepte le clic et vous redirige vers XHR \u00e0 la place. Le navigateur ne rechargera pas la page de cette fa\u00e7on, offrant ainsi \u00e0 l&rsquo;utilisateur une exp\u00e9rience compl\u00e8te de page unique.<\/p>\n<h2>D\u00e9marrer avec 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=\"wp-image-134651 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/kinsta-laravel-inertiajs-tutorial-1024x640.png\" alt=\"Un exemple de page r\u00e9alis\u00e9e avec Inertia.js\" width=\"1024\" height=\"640\"><figcaption id=\"caption-attachment-134651\" class=\"wp-caption-text\">Un exemple de page r\u00e9alis\u00e9e avec Inertia.js<\/figcaption><\/figure>\n<p>Pour comprendre Inertia et comment l&rsquo;int\u00e9grer \u00e0 Laravel, nous allons construire une application web de blog nomm\u00e9e <strong>Kinsta Blog<\/strong> en utilisant le combo le plus puissant, Laravel pour le backend, Vue.js pour le frontend JavaScript et Tailwind CSS pour le styling.<\/p>\n<p>Si vous pr\u00e9f\u00e9rez suivre ce tutoriel dans un environnement local, vous pouvez utiliser <a href=\"https:\/\/kinsta.com\/fr\/devkinsta\/\">DevKinsta<\/a>, un outil puissant pour les d\u00e9veloppeurs, les concepteurs et les agences qui leur permet de construire des applications web WordPress \u00e0 une ou plusieurs pages. Heureusement, WordPress peut \u00eatre facilement int\u00e9gr\u00e9 \u00e0 Laravel \u00e0 l&rsquo;aide du package <a href=\"https:\/\/github.com\/corcel\/corcel\">Corcel<\/a>.<\/p>\n<h3>Conditions pr\u00e9alables<\/h3>\n<p>Pour tirer le meilleur parti de ce tutoriel, vous devez \u00eatre familiaris\u00e9 avec les \u00e9l\u00e9ments suivants :<\/p>\n<ul>\n<li>Bases de Laravel (installation, base de donn\u00e9es, migrations de bases de donn\u00e9es, Eloquent Models, contr\u00f4leurs et routage)<\/li>\n<li>Bases de Vue.js (installation, structure, et formulaires)<\/li>\n<\/ul>\n<p>Si vous n&rsquo;\u00eates pas s\u00fbr de vous, consultez ces fantastiques <a href=\"https:\/\/kinsta.com\/fr\/blog\/tutoriels-laravel\/\">tutoriels gratuits et payants sur Laravel<\/a>. Sinon, lan\u00e7ons-nous.<\/p>\n<h3>\u00c9tape 1 : installer les \u00e9l\u00e9ments de base<\/h3>\n<p>Pour vous concentrer sur Inertia.js et passer directement \u00e0 la partie amusante, assurez-vous d&rsquo;avoir la configuration suivante pr\u00eate \u00e0 fonctionner :<\/p>\n<ol>\n<li>Projet Laravel 9 fraichement install\u00e9 nomm\u00e9 <code>kinsta-blog<\/code><\/li>\n<li>Tailwind CSS CLI install\u00e9 dans notre projet Laravel<\/li>\n<li>Fichier image \u00ab kinsta-logo.png \u00bb. T\u00e9l\u00e9chargez et d\u00e9compressez le pack de logos Kinsta depuis <a href=\"https:\/\/kinsta.com\/fr\/presse\/\">Presse Archive<\/a> et copiez kinsta-logo2.png dans le r\u00e9pertoire public\/images sous le nom de kinsta-logo.png.<\/li>\n<li>Deux composants lame dans <strong>kinsta-blog\/resources\/views<\/strong> pour afficher la page d&rsquo;accueil du blog et un seul article sur le blog comme indiqu\u00e9 ci-dessous : \u00ab \/resources\/views\/<strong>index.blade.php <\/strong>\u00bb :\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    &lt;meta charset=\"utf-8\" \/&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/&gt;\n\n    &lt;title&gt;Kinsta Blog&lt;\/title&gt;\n  &lt;\/head&gt;\n\n  &lt;body&gt;\n    &lt;header&gt;\n      &lt;h1&gt;Kinsta Blog&lt;\/h1&gt;\n    &lt;\/header&gt;\n\n    &lt;main&gt;\n      &lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n\n      &lt;section&gt;\n        &lt;article&gt;\n          &lt;div&gt;\n            &lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n          &lt;\/div&gt;\n\n          &lt;h3&gt;Title for the blog&lt;\/h3&gt;\n          &lt;p&gt;\n            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illum rem\n            itaque error vel perferendis aliquam numquam dignissimos, expedita\n            perspiciatis consectetur!\n          &lt;\/p&gt;\n\n          &lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n        &lt;\/article&gt;\n      &lt;\/section&gt;\n    &lt;\/main&gt;\n\n    &lt;footer&gt;\n      &lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n      &lt;input type=\"email\" \/&gt;\n    &lt;\/footer&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>\u00ab\u00a0\/resources\/views\/<strong>show.blade.php<\/strong>\u00a0\u00bb :<\/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    &lt;meta charset=\"utf-8\" \/&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/&gt;\n\n    &lt;title&gt;Kinsta Blog&lt;\/title&gt;\n  &lt;\/head&gt;\n\n  &lt;body&gt;\n    &lt;main&gt;\n      &lt;article&gt;\n        &lt;div&gt;\n          &lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n        &lt;\/div&gt;\n\n        &lt;h1&gt;Title for the blog&lt;\/h1&gt;\n\n        &lt;p&gt;Article content goes here&lt;\/p&gt;\n      &lt;\/article&gt;\n    &lt;\/main&gt;\n\n    &lt;footer&gt;\n      &lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n      &lt;input type=\"email\" \/&gt;\n    &lt;\/footer&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<\/li>\n<li>Base de donn\u00e9es locale MySQL nomm\u00e9e <code>kinsta_blog<\/code> connect\u00e9e \u00e0 notre projet : \u00ab <strong>.env <\/strong>\u00bb :\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>Mod\u00e8le d&rsquo;article, migrations et fabriques : \u00ab\u00a0 app\/Models\/<strong>Article.php <\/strong>\u00bb :\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    use HasFactory;\n\n    protected $fillable = ['title', 'excerpt', 'body'];\n}<\/code><\/pre>\n<p>\u00ab\u00a0database\/migrations\/<strong>create_articles_table.php<\/strong>\u00a0\u00bb :<\/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    public function up()\n    {\n        Schema::create('articles', function (Blueprint $table) {\n            $table-&gt;id();\n            $table-&gt;string('title');\n            $table-&gt;text('excerpt');\n            $table-&gt;text('body');\n            $table-&gt;timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('articles');\n    }\n};<\/code><\/pre>\n<p>\u00ab\u00a0database\/factories\/<strong>ArticleFactory.php<\/strong>\u00a0\u00bb :<\/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    public function definition()\n    {\n        return [\n            'title' =&gt; $this-&gt;faker-&gt;sentence(6),\n            'excerpt' =&gt; $this-&gt;faker-&gt;paragraph(4),\n            'body' =&gt; $this-&gt;faker-&gt;paragraph(15),\n        ];\n    }\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>C&rsquo;est tout ce dont nous avons besoin pour commencer ! Passons maintenant aux choses s\u00e9rieuses et introduisons Inertia.js dans notre projet.<\/p>\n<h3>\u00c9tape 2 : Installer Inertia<\/h3>\n<p>Le processus d&rsquo;installation d&rsquo;Inertia est divis\u00e9 en deux grandes phases : c\u00f4t\u00e9 serveur (Laravel) et c\u00f4t\u00e9 client (VueJs).<\/p>\n<p>Le guide d&rsquo;installation officiel dans la documentation d&rsquo;Inertia est un peu d\u00e9pass\u00e9 car <a href=\"https:\/\/vitejs.dev\/guide\/#scaffolding-your-first-vite-project\">Laravel 9 utilise d\u00e9sormais Vue<\/a> par d\u00e9faut, mais nous allons le parcourir \u00e9galement.<\/p>\n<h4>1. C\u00f4t\u00e9 serveur<\/h4>\n<p>La premi\u00e8re chose que nous devons faire est d&rsquo;installer les adaptateurs Inertia c\u00f4t\u00e9 serveur avec la commande terminal ci-dessous via Composer.<\/p>\n<pre><code class=\"language-bash\">composer require inertiajs\/inertia-laravel<\/code><\/pre>\n<p>Maintenant, nous allons configurer notre mod\u00e8le racine, qui sera un fichier lame unique qui sera utilis\u00e9 pour charger vos fichiers CSS et JS, ainsi qu&rsquo;une racine Inertia qui sera utilis\u00e9e pour lancer notre application JavaScript.<\/p>\n<p>Comme nous utilisons la version la plus r\u00e9cente de Laravel 9 v9.3.1, nous devons \u00e9galement permettre \u00e0 Vite de faire fonctionner sa magie en l&rsquo;incluant dans nos balises dans \/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    &lt;meta charset=\"utf-8\" \/&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/&gt;\n\n    &lt;!-- Fetch project name dynamically --&gt;\n    &lt;title inertia&gt;{{ config('app.name', 'Laravel') }}&lt;\/title&gt;\n\n    &lt;!-- Scripts --&gt;\n    @vite('resources\/js\/app.js') @inertiaHead\n  &lt;\/head&gt;\n\n  &lt;body class=\"font-sans antialiased\"&gt;\n    @inertia\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Remarquez comment nous sommes capables de r\u00e9cup\u00e9rer le titre du projet de mani\u00e8re dynamique en ajoutant l&rsquo;attribut <code>inertia<\/code> aux balises <code>&lt;title&gt;<\/code>.<\/p>\n<p>Nous avons \u00e9galement ajout\u00e9 la directive <code>@vite<\/code> \u00e0 l&rsquo;en-t\u00eate afin de faire conna\u00eetre \u00e0 Vite le chemin de notre fichier principal JavaScript o\u00f9 nous avons cr\u00e9\u00e9 notre application et import\u00e9 notre CSS. Vite est un outil qui facilite le d\u00e9veloppement JavaScript et CSS en permettant aux d\u00e9veloppeurs de visualiser les modifications apport\u00e9es au frontend sans avoir \u00e0 actualiser la page pendant le d\u00e9veloppement local.<\/p>\n<p>Notre prochaine \u00e9tape sera de cr\u00e9er le middleware <strong>HandleInertiaRequests<\/strong> et de le publier dans notre projet. Nous pouvons le faire en lan\u00e7ant la commande de terminal ci-dessous dans le r\u00e9pertoire racine de notre projet :<\/p>\n<pre><code class=\"language-bash\">php artisan inertia:middleware<\/code><\/pre>\n<p>Une fois cette op\u00e9ration termin\u00e9e, rendez-vous dans \u00ab App\/Http\/<strong>Kernel.php<\/strong> \u00bb et enregistrez <code>HandleInertiaRequests<\/code> comme dernier \u00e9l\u00e9ment de vos middlewares web :<\/p>\n<pre><code class=\"language-php\">'web' =&gt; [\n    \/\/ ...\n    App\\Http\\Middleware\\HandleInertiaRequests::class,\n],<\/code><\/pre>\n<h4>2. C\u00f4t\u00e9 client<\/h4>\n<p>Ensuite, nous devons installer les d\u00e9pendances de notre frontend Vue.js 3 de la m\u00eame mani\u00e8re que du c\u00f4t\u00e9 serveur :<\/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>Ensuite, vous devez installer Vue.js 3 :<\/p>\n<pre><code class=\"language-bash\">npm install vue@next<\/code><\/pre>\n<p>Puis mettez \u00e0 jour votre fichier JavaScript principal pour initialiser Inertia.js avec Vue.js 3, Vite et Laravel :<\/p>\n<p>\u00ab\u00a0resources\/js\/<strong>app.js<\/strong>\u00a0\u00bb :<\/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    resolvePageComponent(\n      `.\/Pages\/${name}.vue`,\n      import.meta.glob(\".\/Pages\/**\/*.vue\")\n    ),\n  setup({ el, app, props, plugin }) {\n    return createApp({ render: () =&gt; h(app, props) })\n      .use(plugin)\n      .mount(el);\n  },\n});<\/code><\/pre>\n<p>Dans l&rsquo;extrait de code ci-dessus, nous utilisons le plugin <code>resolvePageComponent<\/code> de Laravel, et nous lui demandons de r\u00e9soudre nos composants \u00e0 partir du r\u00e9pertoire <strong>.\/Pages\/$name.vue<\/strong>. En effet, nous enregistrerons nos composants Inertia dans ce r\u00e9pertoire plus tard dans notre projet, et cette extension nous aidera \u00e0 charger automatiquement ces composants depuis le bon r\u00e9pertoire.<\/p>\n<p>Tout ce qui reste \u00e0 faire est d&rsquo;installer <code>vitejs\/plugin-vue<\/code>:<\/p>\n<pre><code class=\"language-bash\">npm i @vitejs\/plugin-vue<\/code><\/pre>\n<p>Et mettre \u00e0 jour le fichier <strong>vite.config.js<\/strong>\u00a0file :<\/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    laravel({\n      input: [\"resources\/css\/app.css\", \"resources\/js\/app.js\"],\n      refresh: true,\n    }),\n    vue({\n      template: {\n        transformAssetUrls: {\n          base: null,\n          includeAbsolute: false,\n        },\n      },\n    }),\n  ],\n});<\/code><\/pre>\n<p>L&rsquo;\u00e9tape finale consiste \u00e0 installer nos d\u00e9pendances et \u00e0 compiler nos fichiers :<\/p>\n<pre><code class=\"language-bash\">npm install\n\nnpm run dev<\/code><\/pre>\n<p>Et voil\u00e0 ! Vous vous \u00eates procur\u00e9 une application Laravel 9 fonctionnelle avec Vue.js 3 et Vite. Maintenant, nous devons voir quelque chose en action !<\/p>\n<h2>Cr\u00e9ation de pages Inertia<\/h2>\n<p>Vous vous souvenez de ces deux fichiers blade (<strong>index<\/strong> et <strong>show<\/strong>) pour afficher notre page d&rsquo;accueil et un seul article ?<\/p>\n<p>Le seul fichier blade dont nous aurons besoin en utilisant Inertia est <strong>app.blade.php<\/strong>, que nous avons d\u00e9j\u00e0 utilis\u00e9 une fois lors de l&rsquo;installation d&rsquo;Inertia. Alors qu&rsquo;advient-il de ces fichiers maintenant ?<\/p>\n<p>Nous allons transformer ces fichiers de composants blade en composants Inertia.js.<\/p>\n<p>Chaque page de votre application poss\u00e8de son propre contr\u00f4leur et composant JavaScript avec Inertia. Cela vous permet d&rsquo;obtenir uniquement les donn\u00e9es requises pour cette page, sans utiliser une API. Les pages Inertia ne sont rien d&rsquo;autre que des composants JavaScript, dans notre cas, ce sont des composants Vue.js. Elles n&rsquo;ont rien de particuli\u00e8rement remarquable \u00e0 leur sujet. Donc, ce que nous allons faire, c&rsquo;est envelopper tout le contenu HTML entre les balises <code>&lt;template&gt;<\/code> et tout ce qui est li\u00e9 \u00e0 JavaScript sera envelopp\u00e9 avec les balises <code>&lt;script&gt;<\/code>.<\/p>\n<p>Cr\u00e9ez un dossier appel\u00e9 \u00ab Pages \u00bb et d\u00e9placez-y vos fichiers. Nous aurons donc \u00ab <strong>index.blade.php<\/strong> \u00bb et \u00ab <strong>show.blade.php<\/strong> \u00bb dans \u00ab <strong>.\/resources\/js\/Pages<\/strong> \u00bb. Ensuite, nous modifierons le format du fichier en \u00ab .vue \u00bb au lieu de \u00ab .blade.php \u00bb tout en mettant la premi\u00e8re lettre de leurs noms en majuscule et nous transformerons son contenu en un composant Vue.js standard. Nous exclurons les balises <code>&lt;html&gt;<\/code>, <code>&lt;head&gt;<\/code>, et <code>&lt;body&gt;<\/code> car elles sont d\u00e9j\u00e0 incluses dans le composant racine principal de la lame.<\/p>\n<p>\u00ab resources\/js\/Pages\/<strong>Index.vue<\/strong> \u00bb :<\/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    &lt;h1&gt;Kinsta Blog&lt;\/h1&gt;\n  &lt;\/header&gt;\n\n  &lt;main&gt;\n    &lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n\n    &lt;section&gt;\n      &lt;article&gt;\n        &lt;div&gt;\n          &lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n        &lt;\/div&gt;\n\n        &lt;h3&gt;Title for the blog&lt;\/h3&gt;\n        &lt;p&gt;\n          Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illum rem\n          itaque error vel perferendis aliquam numquam dignissimos, expedita\n          perspiciatis consectetur!\n        &lt;\/p&gt;\n\n        &lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n      &lt;\/article&gt;\n    &lt;\/section&gt;\n  &lt;\/main&gt;\n\n  &lt;footer&gt;\n    &lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n    &lt;input type=\"email\" \/&gt;\n  &lt;\/footer&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>\u00ab\u00a0resources\/js\/Pages\/<strong>Show.vue<\/strong>\u00a0\u00bb :<\/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    &lt;h1&gt;Welcome to Kinsta Blog&lt;\/h1&gt;\n  &lt;\/header&gt;\n\n  &lt;main&gt;\n    &lt;article&gt;\n      &lt;h1&gt;Title for the blog&lt;\/h1&gt;\n\n      &lt;p&gt;Article content goes here&lt;\/p&gt;\n    &lt;\/article&gt;\n  &lt;\/main&gt;\n\n  &lt;footer&gt;\n    &lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n    &lt;input type=\"email\" \/&gt;\n  &lt;\/footer&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Il y a quelque chose qui me d\u00e9range vraiment ! Nous continuons \u00e0 copier et coller notre en-t\u00eate et notre pied de page dans chaque composant, ce qui n&rsquo;est pas une tr\u00e8s bonne pratique. Cr\u00e9ons un Layout de base Inertia pour stocker nos composants persistants.<\/p>\n<p>Cr\u00e9ez un dossier appel\u00e9 \u00ab Layouts \u00bb dans \u00ab <strong>\/resources\/js<\/strong> \u00bb et dans ce dossier, cr\u00e9ez un fichier nomm\u00e9 \u00ab KinstaLayout.vue \u00bb. Ce fichier contiendra notre en-t\u00eate et notre pied de page et le <code>main<\/code> avec un <code>&lt;slot \/&gt;<\/code> pour permettre \u00e0 tous les composants envelopp\u00e9s avec cette mise en page d&rsquo;\u00eatre int\u00e9gr\u00e9s \u00e0 l&rsquo;int\u00e9rieur. Ce fichier devrait ressembler \u00e0 ceci :<\/p>\n<p>\u00ab resources\/js\/Layouts\/<strong>KinstaLayout.vue<\/strong> \u00bb :<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;&lt;\/script&gt;\n\n&lt;template&gt;\n    &lt;header&gt;\n    &lt;h1&gt;Kinsta Blog&lt;\/h1&gt;\n  &lt;\/header&gt;\n\n  &lt;main&gt;\n        &lt;slot \/&gt;\n  &lt;\/main&gt;\n\n  &lt;footer&gt;\n    &lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n    &lt;input type=\"email\" \/&gt;\n  &lt;\/footer&gt;\n\n&lt;\/template&gt;<\/code><\/pre>\n<p>Ensuite, nous allons importer cette nouvelle mise en page dans nos pages et envelopper tout le contenu HTML avec elle. Nos composants devraient ressembler \u00e0 ceci :<\/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    &lt;section&gt;\n      &lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n      &lt;article&gt;\n        &lt;div&gt;\n          &lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n        &lt;\/div&gt;\n\n        &lt;h3&gt;Title for the blog&lt;\/h3&gt;\n        &lt;p&gt;\n          Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illum rem\n          itaque error vel perferendis aliquam numquam dignissimos, expedita\n          perspiciatis consectetur!\n        &lt;\/p&gt;\n\n        &lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n      &lt;\/article&gt;\n    &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    &lt;article&gt;\n      &lt;h1&gt;Title for the blog&lt;\/h1&gt;\n\n      &lt;p&gt;Article content goes here&lt;\/p&gt;\n    &lt;\/article&gt;\n  &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<h2>Routes Laravel et rendu Inertia<\/h2>\n<p>Tout d&rsquo;abord, utilisons le fichier \u00ab <strong>ArticleFactory<\/strong> \u00bb que nous avons depuis le point de d\u00e9part de notre tutoriel et semons quelques articles dans notre base de donn\u00e9es.<\/p>\n<p>\u00ab database\/seeders\/<strong>databaseSeeder.php<\/strong> \u00bb :<\/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    public function run()\n    {\n        Article::factory(10)-&gt;create();\n    }\n}<\/code><\/pre>\n<p>Ensuite, saisissez la commande terminal ci-dessous pour migrer vos tables et ensemencer les fausses donn\u00e9es des usines :<\/p>\n<pre><code class=\"language-bash\">php artisan migrate:fresh --seed<\/code><\/pre>\n<p>Ceci cr\u00e9era 10 faux articles dans la base de donn\u00e9es, que nous devrons passer \u00e0 notre vue en utilisant le routage Laravel. Maintenant que nous utilisons Inertia pour rendre les vues, la fa\u00e7on dont nous \u00e9crivions nos routes va l\u00e9g\u00e8rement changer. Cr\u00e9ons notre premi\u00e8re route Laravel Inertia dans \u00ab routes\/<strong>web.php<\/strong> \u00bb et renvoyons la vue de la page d&rsquo;accueil depuis \u00ab \/resources\/js\/Pages\/<strong>Index.vue<\/strong> \u00bb.<\/p>\n<p>\u00ab routes\/<strong>web.php<\/strong> \u00bb :<\/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    return Inertia::render('Index', [\n        'articles' =&gt; Article::latest()-&gt;get()\n    ]);\n})-&gt;name('home');<\/code><\/pre>\n<p>Remarquez que nous avons import\u00e9 <code>Inertia<\/code> et que nous n&rsquo;avons pas utilis\u00e9 l&rsquo;aide Laravel <code>view()<\/code> pour retourner la vue, mais plut\u00f4t <code>Inertia::render<\/code>. Inertia recherchera \u00e9galement par d\u00e9faut le nom du fichier que nous avons mentionn\u00e9 dans notre route dans le dossier <strong>Pages<\/strong> \u00e0 \u00ab resources\/js \u00bb.<\/p>\n<p>Dirigez-vous vers le fichier d&rsquo;Index et d\u00e9finissez les donn\u00e9es r\u00e9cup\u00e9r\u00e9es en tant que prop et bouclez sur elles avec <code>v-for<\/code> pour afficher les r\u00e9sultats. Entre les balises de script, d\u00e9finissez les donn\u00e9es pass\u00e9es en tant qu&rsquo;accessoire. Tout ce qu&rsquo;Inertia doit savoir est le type de donn\u00e9es que vous attendez, qui dans notre cas est un objet &lsquo;Article&rsquo; contenant un tableau d&rsquo;articles.<\/p>\n<p>\u00ab resources\/js\/Pages\/<strong>Index.vue<\/strong> \u00bb :<\/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>Notez qu&rsquo;il suffit de le d\u00e9finir comme prop sans le renvoyer car nous utilisons le format <code>setup<\/code> pour l&rsquo;API de composition de Vue.js 3. Si nous utilisions l&rsquo;API d&rsquo;options, nous devrions le renvoyer.<\/p>\n<p>Faisons la boucle :<\/p>\n<pre><code class=\"language-html\">&lt;template&gt;\n  &lt;KinstaLayout&gt;\n    &lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n\n    &lt;section&gt;\n      \/\/ Looping over articles\n      &lt;article v-for=\"article in articles\":key=\"article.id\"&gt;\n        &lt;div&gt;\n          &lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n        &lt;\/div&gt;\n\n        &lt;h3&gt;{{article.title}}&lt;\/h3&gt;\n        &lt;p&gt;{{article.excerpt}}&lt;\/p&gt;\n\n        &lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n      &lt;\/article&gt;\n    &lt;\/section&gt;\n  &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p><code>npm run dev<\/code> (laissez-la en cours d&rsquo;ex\u00e9cution car nous utilisons Vite) et <code>php artisan serve<\/code> pour d\u00e9marrer le serveur de d\u00e9veloppement laravel et acc\u00e9der \u00e0 notre site web, nous verrons la page attendue affichant les dix articles de la base de donn\u00e9es.<\/p>\n<p>Maintenant, nous utilisons l&rsquo;extension <a href=\"https:\/\/chrome.google.com\/webstore\/detail\/vuejs-devtools\/nhdogjmejiglipccpnnnanhbledajbpd?hl=en\">Vue DevTools de Google Chrome<\/a>, qui nous permet de d\u00e9boguer mon application. Nous allons vous montrer comment nos donn\u00e9es sont transmises au composant.<\/p>\n<figure id=\"attachment_134667\" aria-describedby=\"caption-attachment-134667\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134667 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/inspect-Inertia-passed-data-1024x543.png\" alt=\"Inspecter les propri\u00e9t\u00e9s.\" width=\"1024\" height=\"543\"><figcaption id=\"caption-attachment-134667\" class=\"wp-caption-text\">Inspecter les propri\u00e9t\u00e9s.<\/figcaption><\/figure>\n<p>\u00ab articles \u00bb est transmis au composant en tant qu&rsquo;objet prop contenant un tableau d&rsquo;articles ; chaque article du tableau est \u00e9galement un objet avec des propri\u00e9t\u00e9s qui correspondent aux donn\u00e9es qu&rsquo;il a acquises de la base de donn\u00e9es. Cela signifie que toute donn\u00e9e que nous transf\u00e9rons de Laravel \u00e0 Inertia sera trait\u00e9e comme un objet prop.<\/p>\n<h2>Utilisation de Tailwind CSS avec Inertia.js<\/h2>\n<p>Puisque Tailwind est d\u00e9j\u00e0 install\u00e9 dans notre projet au point de d\u00e9part, tout ce que nous devons faire est de lui dire de lire nos composants Inertia. Ceci peut \u00eatre accompli en modifiant \u00ab <strong>tailwind.config.js<\/strong> \u00bb comme ci-dessous :<\/p>\n<pre><code class=\"language-js\">\/** @type {import('tailwindcss').Config} *\/\nmodule.exports = {\n  content: [\n    \".\/storage\/framework\/views\/*.php\",\n    \".\/resources\/views\/**\/*.blade.php\",\n    \".\/resources\/js\/**\/*.vue\",\n  ],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n};<\/code><\/pre>\n<p>Assurez-vous ensuite que nous avons import\u00e9 notre fichier CSS dans \u00ab resources\/js\/<strong>app.js<\/strong> \u00bb :<\/p>\n<pre><code class=\"language-js\">import \"..\/css\/app.css\";<\/code><\/pre>\n<p>Et maintenant nous sommes pr\u00eats \u00e0 styliser nos composants.<\/p>\n<p>\u00ab resources\/js\/Pages\/<strong>Index.vue<\/strong> \u00bb :<\/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;\n\n&lt;template&gt;\n &lt;KinstaLayout&gt;\n    &lt;h2 class=\"text-2xl font-bold py-10\"&gt;Read our latest articles&lt;\/h2&gt;\n\n    &lt;section class=\"space-y-5 border-b-2 pb-10\"&gt;\n      &lt;article\n        v-for=\"article in articles\"\n        :key=\"article.id\"\n        class=\"flex justify-center items-center shadow-md bg-white rounded-xl p-4 mx-auto max-w-3xl\"\n      &gt;\n\n         &lt;img\n            src=\"\/images\/kinsta-logo.png\"\n            class=\"w-32 h-32 rounded-xl object-cover\"\n            alt=\"\"\n         \/&gt;\n\n        &lt;div class=\"flex flex-col text-left justify-between pl-3 space-y-5\"&gt;\n          &lt;h3\n            class=\"text-xl font-semibold text-indigo-600 hover:text-indigo-800\"\n          &gt;\n            &lt;a href=\"#\"&gt;{{ article.title }}&lt;\/a&gt;\n          &lt;\/h3&gt;\n          &lt;p&gt;\n           {{ article.excerpt }}\n          &lt;\/p&gt;\n          &lt;a\n            href=\"#\"\n            class=\"text-indigo-600 hover:text-indigo-800 w-fit self-end font-semibold\"\n            &gt;Read more&lt;\/a\n          &gt;\n        &lt;\/div&gt;\n      &lt;\/article&gt;\n    &lt;\/section&gt;\n &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>\u00ab resources\/js\/Layouts\/<strong>KinstaLayout.vue<\/strong> \u00bb :<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;&lt;\/script&gt;\n\n&lt;template&gt;\n    &lt;header\n        class=\"bg-gradient-to-r from-blue-700 via-indigo-700 to-blue-700 w-full text-center py-4\"\n    &gt;\n        &lt;h1 class=\"text-white font-bold text-4xl\"&gt;Kinsta Blog&lt;\/h1&gt;\n    &lt;\/header&gt;\n\n    &lt;main class=\"container mx-auto text-center\"&gt;\n        &lt;slot \/&gt;\n    &lt;\/main&gt;\n\n    &lt;footer\n        class=\"bg-gradient-to-b from-transparent to-gray-300 w-full text-center mt-5 py-10 mx-auto\"\n    &gt;\n        &lt;h2 class=\"font-bold text-xl pb-5\"&gt;Join our Newsletter&lt;\/h2&gt;\n\n        &lt;input\n            class=\"rounded-xl w-80 h-12 px-3 py-2 shadow-md\"\n            type=\"email\"\n            placeholder=\"Write your email..\"\n        \/&gt;\n    &lt;\/footer&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Si vous regardez le navigateur, vous remarquerez que Vite a d\u00e9j\u00e0 mis \u00e0 jour la page avec la magie de 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=\"wp-image-134669 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/kinsta-laravel-inertiajs-blog.gif\" alt=\"Rendu des propri\u00e9t\u00e9s Inertia.\" width=\"911\" height=\"620\"><figcaption id=\"caption-attachment-134669\" class=\"wp-caption-text\">Rendu des propri\u00e9t\u00e9s Inertia.<\/figcaption><\/figure>\n<h2>Liens Inertia<\/h2>\n<p>Maintenant que nous avons une page d&rsquo;accueil fonctionnelle qui peut afficher tous les articles de la base de donn\u00e9es, nous devons cr\u00e9er une autre route pour afficher les articles individuels. Cr\u00e9ons une nouvelle route et d\u00e9finissons l&rsquo;URL avec un caract\u00e8re g\u00e9n\u00e9rique \u00ab id \u00bb :<\/p>\n<p>\u00ab\u00a0routes\/<strong>web.php<\/strong>\u00a0\u00bb<\/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    return Inertia::render('Index', [\n        'articles' =&gt; Article::latest()-&gt;get()\n    ]);\n})-&gt;name('home');\n\nRoute::get('\/posts\/{article:id}', function (Article $article) {\n    return Inertia::render('Show', [\n        'article' =&gt; $article\n    ]);\n})-&gt;name('article.show');<\/code><\/pre>\n<p>Nous avons import\u00e9 le mod\u00e8le \u00ab Article \u00bb et ajout\u00e9 une nouvelle route pour renvoyer le composant Inertia <strong>Show.vue<\/strong>. Nous avons \u00e9galement tir\u00e9 parti de <a href=\"https:\/\/laravel.com\/docs\/master\/routing#customizing-the-key\">la liaison de mod\u00e8le de route de Laravel<\/a>, qui permet \u00e0 Laravel d&rsquo;obtenir automatiquement l&rsquo;article auquel nous faisons r\u00e9f\u00e9rence.<\/p>\n<p>Tout ce dont nous avons besoin maintenant, c&rsquo;est d&rsquo;un moyen de visiter cette route en cliquant sur un lien de la page d&rsquo;accueil sans avoir \u00e0 recharger la page enti\u00e8re. Ceci est possible gr\u00e2ce \u00e0 l&rsquo;outil magique d&rsquo;Inertia <code>&lt;Link&gt;<\/code>. Nous avons mentionn\u00e9 dans l&rsquo;introduction qu&rsquo;Inertia utilise <code>&lt;Link&gt;<\/code> comme enveloppe pour une balise d&rsquo;ancrage standard <code>&lt;a&gt;<\/code>, et que cette enveloppe est destin\u00e9e \u00e0 rendre les visites de pages aussi transparentes que possible. Dans Inertia, la balise <code>&lt;Link&gt;<\/code> peut se comporter comme une balise d&rsquo;ancrage qui ex\u00e9cute les requ\u00eates <code>&lt;GET&gt;<\/code>, mais elle peut aussi agir comme une <code>&lt;button&gt;<\/code> et une <code>&lt;form&gt;<\/code> en m\u00eame temps. Voyons comment nous pouvons l&rsquo;appliquer \u00e0 notre projet.<\/p>\n<p>Dans notre Index.vue, nous allons importer <code>&lt;Link&gt;<\/code> d&rsquo;Inertia, et supprimer les balises d&rsquo;ancrage <code>&lt;a&gt;<\/code> et les remplacer par des balises Inertia <code>&lt;Link&gt;<\/code>. L&rsquo;attribut <code>href<\/code> sera d\u00e9fini sur l&rsquo;URL de la route que nous avons pr\u00e9c\u00e9demment cr\u00e9\u00e9e pour la consultation de l&rsquo;article :<\/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    articles: Object,\n});\n&lt;\/script&gt;\n\n&lt;template&gt;\n    &lt;KinstaLayout&gt;\n        &lt;section class=\"space-y-5 border-b-2 pb-10\"&gt;\n            &lt;h2 class=\"text-2xl font-bold pt-10 mx-auto text-center\"&gt;\n                Read our latest articles\n            &lt;\/h2&gt;\n\n            &lt;article\n                v-for=\"article in articles\"\n                :key=\"article.id\"\n                class=\"flex justify-center items-center shadow-md bg-white rounded-xl p-4 mx-auto max-w-3xl\"\n            &gt;\n                &lt;img\n                    src=\"\/images\/kinsta-logo.png\"\n                    class=\"w-32 h-32 rounded-xl object-cover\"\n                    alt=\"\"\n                \/&gt;\n\n                &lt;div\n                    class=\"flex flex-col text-left justify-between pl-3 space-y-5\"\n                &gt;\n                    &lt;h3\n                        class=\"text-xl font-semibold text-indigo-600 hover:text-indigo-800\"\n                    &gt;\n                        &lt;Link :href=\"'\/posts\/' + article.id\"&gt;{{\n                            article.title\n                        }}&lt;\/Link&gt;\n                    &lt;\/h3&gt;\n                    &lt;p&gt;\n                        {{ article.excerpt }}\n                    &lt;\/p&gt;\n                    &lt;Link\n                        :href=\"'\/posts\/' + article.id\"\n                        class=\"text-indigo-600 hover:text-indigo-800 w-fit self-end font-semibold\"\n                        &gt;Read more\n                    &lt;\/Link&gt;\n                &lt;\/div&gt;\n            &lt;\/article&gt;\n        &lt;\/section&gt;\n    &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Nous allons styliser <strong>Show.vue<\/strong> avec Tailwind pour qu&rsquo;il ait l&rsquo;air un peu plus habill\u00e9 et pr\u00eat pour notre visite. Nous devons \u00e9galement lui faire savoir qu&rsquo;il doit s&rsquo;attendre \u00e0 un objet \u00ab Article \u00bb et le d\u00e9finir en tant qu&rsquo;accessoire :<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n\ndefineProps({\n    article: Object,\n});\n&lt;\/script&gt;\n\n&lt;template&gt;\n    &lt;KinstaLayout&gt;\n        &lt;article class=\"mx-auto mt-10 flex justify-center max-w-5xl border-b-2\"&gt;\n            &lt;img\n                src=\"\/images\/kinsta-logo.png\"\n                class=\"w-80 h-80 rounded-xl mx-auto py-5\"\n                alt=\"\"\n            \/&gt;\n            &lt;div class=\"text-left flex flex-col pt-5 pb-10 px-10\"&gt;\n                &lt;h1 class=\"text-xl font-semibold mb-10\"&gt;{{ article.title }}&lt;\/h1&gt;\n                &lt;p&gt;{{ article.body }}&lt;\/p&gt;\n            &lt;\/div&gt;\n        &lt;\/article&gt;\n    &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Maintenant, lorsque nous cliquons sur le titre de l&rsquo;article ou sur \u00ab Read more \u00bb, nous serons magiquement transport\u00e9s vers <strong>Show.vue<\/strong> sans rafra\u00eechir la page.<\/p>\n<figure id=\"attachment_134671\" aria-describedby=\"caption-attachment-134671\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134671 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/kinsta-laravel-inertiajs-Link-1024x596.gif\" alt=\"Les liens d'inertie sont en place\" width=\"1024\" height=\"596\"><figcaption id=\"caption-attachment-134671\" class=\"wp-caption-text\">Les liens d&rsquo;inertie sont en place.<\/figcaption><\/figure>\n<p>Dans notre cas, nous utilisons <code>&lt;Link&gt;<\/code> comme balise d&rsquo;ancrage qui envoie une requ\u00eate <code>GET<\/code> \u00e0 la route et renvoie les nouvelles donn\u00e9es, mais nous pouvons utiliser <code>&lt;Link&gt;<\/code> pour \u00e9galement <code>POST<\/code>, <code>PUT<\/code>, <code>PATCH<\/code> et <code>DELETE<\/code><\/p>\n<p>\u00ab routes\/<strong>web.php<\/strong> \u00bb :<\/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>Trucs et astuces de Laravel Inertia que vous devriez conna\u00eetre<\/h2>\n<p>Nous avons maintenant un SPA fonctionnel construit avec Laravel, Inertia et Tailwind CSS. Mais Inertia peut nous aider \u00e0 r\u00e9aliser bien plus. Il est temps d&rsquo;acqu\u00e9rir quelques techniques Inertia qui aideront \u00e0 la fois les d\u00e9veloppeurs et les visiteurs de l&rsquo;application.<\/p>\n<h3>G\u00e9n\u00e9rer des URL<\/h3>\n<p>Vous avez peut-\u00eatre remarqu\u00e9 que nous avons ajout\u00e9 des noms \u00e0 nos routes Laravel sans les utiliser. Inertia nous permet d&rsquo;utiliser nos routes nomm\u00e9es dans nos composants au lieu d&rsquo;\u00e9crire manuellement la route compl\u00e8te.<\/p>\n<p>Nous pouvons y parvenir en <a href=\"https:\/\/github.com\/tighten\/ziggy#installation\">installant le paquetage Ziggy<\/a> dans notre projet :<\/p>\n<pre><code class=\"language-bash\">composer require tightenco\/ziggy<\/code><\/pre>\n<p>Ensuite, allez dans \u00ab resources\/js\/app.js \u00bb et mettez-le \u00e0 jour comme ceci :<\/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    title: (title) =&gt; `${title} - ${appName}`,\n    resolve: (name) =&gt;\n        resolvePageComponent(\n            `.\/Pages\/${name}.vue`,\n            import.meta.glob(\".\/Pages\/**\/*.vue\")\n        ),\n    setup({ el, app, props, plugin }) {\n        return createApp({ render: () =&gt; h(app, props) })\n            .use(plugin)\n            .use(ZiggyVue, Ziggy)\n            .mount(el);\n    },\n});<\/code><\/pre>\n<p>Allez dans \u00ab \/resources\/views\/<strong>app.blade.php<\/strong> \u00bb et mettez \u00e0 jour le head avec la directive <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    &lt;meta charset=\"utf-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n\n    &lt;!-- Fetch project name dynamically --&gt;\n    &lt;title inertia&gt;{{ config('app.name', 'Laravel') }}&lt;\/title&gt;\n\n    &lt;!-- Scripts --&gt;\n    @routes\n    @vite('resources\/js\/app.js')\n    @inertiaHead\n&lt;\/head&gt;\n\n&lt;body class=\"font-sans antialiased\"&gt;\n    @inertia\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/code><\/pre>\n<p>&#8230;et rafra\u00eechissez vos paquets NPM en tapant les deux commandes de terminal ci-dessous :<\/p>\n<pre><code class=\"language-bash\">npm install && npm run dev<\/code><\/pre>\n<p>Ce paquetage nous permet d&rsquo;utiliser des routes nomm\u00e9es dans nos composants Inertia. Dirigeons-nous donc vers <strong>Index.vue<\/strong> et supprimons l&rsquo;ancienne route manuelle pour la remplacer par le nom de la route tout en transmettant les donn\u00e9es normalement comme si nous \u00e9tions dans notre contr\u00f4leur.<\/p>\n<p>Nous allons remplacer ceci :<\/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;par ceci :<\/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>Cela nous donnera exactement le m\u00eame comportement que nous avions, mais c&rsquo;est plus convivial pour les d\u00e9veloppeurs et extr\u00eamement utile lorsque votre itin\u00e9raire attend de nombreux param\u00e8tres.<\/p>\n<h3>Indicateurs de progression<\/h3>\n<p>Il s&rsquo;agit de l&rsquo;une des caract\u00e9ristiques les plus int\u00e9ressantes d&rsquo;Inertia.js ; \u00e9tant donn\u00e9 que les SPA offrent une exp\u00e9rience interactive \u00e0 l&rsquo;utilisateur, le fait d&rsquo;avoir un retour constant sur le chargement d&rsquo;une requ\u00eate serait un ajout fantastique \u00e0 l&rsquo;application. Ceci peut \u00eatre accompli par une biblioth\u00e8que s\u00e9par\u00e9e qu&rsquo;Inertia offre.<\/p>\n<p>La biblioth\u00e8que \u00ab @inertiajs\/progress \u00bb est une enveloppe autour de <a href=\"https:\/\/ricostacruz.com\/nprogress\/\">NProgress<\/a> qui affiche conditionnellement les indicateurs de chargement en fonction des \u00e9v\u00e9nements Inertia. Vous n&rsquo;avez pas vraiment besoin de savoir comment cela fonctionne dans les coulisses, alors faisons en sorte que cela fonctionne.<\/p>\n<p>Nous pouvons installer cette biblioth\u00e8que avec la commande de terminal ci-dessous :<\/p>\n<pre><code class=\"language-bash\">npm install @inertiajs\/progress<\/code><\/pre>\n<p>Une fois install\u00e9e, nous devons l&rsquo;importer dans \u00ab <strong>resources\/js\/app.js<\/strong> \u00bb<\/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    title: (title) =&gt; `${title} - ${appName}`,\n    resolve: (name) =&gt;\n        resolvePageComponent(\n            `.\/Pages\/${name}.vue`,\n            import.meta.glob(\".\/Pages\/**\/*.vue\")\n        ),\n    setup({ el, app, props, plugin }) {\n        return createApp({ render: () =&gt; h(app, props) })\n            .use(plugin)\n            .use(ZiggyVue, Ziggy)\n            .mount(el);\n    },\n});\n\nInertiaProgress.init({ color: \"#000000\", showSpinner: true });<\/code><\/pre>\n<p>Cela affichera une barre de chargement et un spinner de chargement en couleur noire, mais nous pouvons changer la couleur ainsi que d&rsquo;autres options utiles qui se trouvent dans la <a href=\"https:\/\/inertiajs.com\/progress-indicators\">documentation de l&rsquo;indicateur de progression 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=\"wp-image-134672 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Inertia-progress-indicator-1024x83.gif\" alt=\"L'indicateur de progression Inertia (en haut \u00e0 droite).\" width=\"1024\" height=\"83\"><figcaption id=\"caption-attachment-134672\" class=\"wp-caption-text\">L&rsquo;indicateur de progression Inertia (en haut \u00e0 droite).<\/figcaption><\/figure>\n<h3>Gestion du d\u00e9filement<\/h3>\n<p>Dans certains cas, vous pouvez souhaiter naviguer vers une nouvelle page tout en conservant la m\u00eame position de d\u00e9filement. Vous en aurez peut-\u00eatre besoin si vous permettez aux utilisateurs de laisser des commentaires ; cela soumettra un formulaire et chargera le nouveau commentaire de la base de donn\u00e9es dans votre composant ; vous voudrez que cela se produise sans que l&rsquo;utilisateur perde la position de d\u00e9filement. Inertia s&rsquo;en charge pour nous.<\/p>\n<p>Dans notre cas, appliquons-la \u00e0 notre balise <code>&lt;Link&gt;<\/code> dans <strong>Index.vue<\/strong>. Pour pr\u00e9server la position de d\u00e9filement tout en redirigeant vers une page diff\u00e9rente avec <code>&lt;Link&gt;<\/code> d&rsquo;Inertia, il suffit d&rsquo;ajouter l&rsquo;attribut <code>preserve-scroll<\/code> \u00e0 <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>Conseils SEO<\/h2>\n<p>Depuis la naissance des SPA, les gens se pr\u00e9occupent de l&rsquo;optimisation des moteurs de recherche (SEO). Il est commun\u00e9ment admis que si vous utilisez l&rsquo;approche SPA, les moteurs de recherche auront du mal \u00e0 explorer votre application web car tout est rendu c\u00f4t\u00e9 client, ce qui fait que votre site n&rsquo;appara\u00eetra pas en t\u00eate des r\u00e9sultats de recherche. N\u00e9anmoins, comment se fait-il que ces plateformes populaires comme Facebook et Github sont maintenant des SPA et obtiennent toujours de bons r\u00e9sultats en mati\u00e8re de SEO ?<\/p>\n<p>Eh bien, ce n&rsquo;est plus une mission : impossible. Inertia propose quelques solutions pour aider votre SPA \u00e0 devenir SEO friendly.<\/p>\n<h3>Inertia Vue SSR avec Laravel et Vite<\/h3>\n<p>Les moteurs de recherche recherchent toujours du HTML sur votre site web afin d&rsquo;en identifier le contenu ; cependant, si vous n&rsquo;avez pas de HTML dans vos URL, cette t\u00e2che devient plus difficile. Lorsque vous d\u00e9veloppez des SPA, tout ce que vous avez sur votre page est JavaScript et JSON. Inertia a introduit une fonctionnalit\u00e9 de Server-Side Rendering (SSR) que vous pouvez ajouter \u00e0 votre application. Cela permet \u00e0 votre application de pr\u00e9-rendre une page initiale visit\u00e9e sur le serveur, puis d&rsquo;envoyer le HTML rendu au navigateur. Cela permet aux utilisateurs de voir et d&rsquo;interagir avec vos pages avant qu&rsquo;elles ne soient enti\u00e8rement charg\u00e9es, et cela pr\u00e9sente \u00e9galement d&rsquo;autres avantages, comme la r\u00e9duction du temps n\u00e9cessaire aux moteurs de recherche pour indexer votre site.<\/p>\n<p>Pour r\u00e9sumer son fonctionnement, Inertia identifiera s&rsquo;il fonctionne sur un serveur Node.js et rendra les noms des composants, les propri\u00e9t\u00e9s, l&rsquo;URL et la version des actifs en HTML. Cela fournira \u00e0 l&rsquo;utilisateur et au moteur de recherche pratiquement tout ce que votre page a \u00e0 offrir.<\/p>\n<p>Cependant, comme nous avons affaire \u00e0 Laravel, cela n&rsquo;a gu\u00e8re de sens car Laravel est un framework PHP et ne fonctionne pas sur un serveur Node.js. Par cons\u00e9quent, nous transmettrons la demande \u00e0 un service Node.js, qui rendra la page et renverra du HTML. Cela rendra notre application Laravel Vue SEO friendly par d\u00e9faut.<\/p>\n<p>Tout d&rsquo;abord, nous devons installer le paquet Vue.js SSR npm :<\/p>\n<pre><code class=\"language-bash\">npm install @vue\/server-renderer<\/code><\/pre>\n<p>Un autre paquet \u00ab NPM \u00bb utile d&rsquo;Inertia fournit un simple serveur \u00ab HTTP \u00bb. Il est fortement recommand\u00e9 de l&rsquo;installer :<\/p>\n<pre><code class=\"language-bash\">npm install @inertiajs\/server<\/code><\/pre>\n<p>Ensuite, dans \u00ab resources\/js\/ \u00bb, nous allons ajouter un nouveau fichier nomm\u00e9 <strong>ssr.js<\/strong>. Ce fichier sera tr\u00e8s similaire au fichier <strong>app.js<\/strong> que nous avons cr\u00e9\u00e9 lors de l&rsquo;installation d&rsquo;Inertia, sauf qu&rsquo;il s&rsquo;ex\u00e9cutera dans Node.js plut\u00f4t que dans le navigateur :<\/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    createInertiaApp({\n        page,\n        render: renderToString,\n        title: (title) =&gt; `${title} - ${appName}`,\n        resolve: (name) =&gt;\n            resolvePageComponent(\n                `.\/Pages\/${name}.vue`,\n                import.meta.glob(\".\/Pages\/**\/*.vue\")\n            ),\n        setup({ app, props, plugin }) {\n            return createSSRApp({ render: () =&gt; h(app, props) })\n                .use(plugin)\n                .use(ZiggyVue, {\n                    ...page.props.ziggy,\n                    location: new URL(page.props.ziggy.location),\n                });\n        },\n    })\n);<\/code><\/pre>\n<p>Veillez \u00e0 ne pas tout inclure dans le fichier <strong>ssr.js<\/strong> car il ne sera pas visible pour les visiteurs ; ce fichier est uniquement destin\u00e9 aux moteurs de recherche et aux navigateurs pour afficher les donn\u00e9es dans votre page, donc n&rsquo;incluez que ce qui est important pour vos donn\u00e9es ou seulement ce qui rendra vos donn\u00e9es disponibles.<\/p>\n<p>\u00ab Par d\u00e9faut, le serveur SSR d&rsquo;Inertia fonctionnera sur le port 13714. Cependant, vous pouvez changer cela en fournissant un second argument \u00e0 la m\u00e9thode createServer. \u00bb Inertia DOCss.<\/p>\n<p>Les DOC d&rsquo;Inertia.js n&rsquo;expliquent pas comment int\u00e9grer le SSR d&rsquo;Inertia \u00e0 Vite, mais nous allons le faire maintenant. Allez dans <strong>vite.config.js<\/strong> et collez ce qui suit :<\/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        laravel({\n            input: \"resources\/js\/app.js\",\n            ssr: \"resources\/js\/ssr.js\",\n        }),\n        vue({\n            template: {\n                transformAssetUrls: {\n                    base: null,\n                    includeAbsolute: false,\n                },\n            },\n        }),\n    ],\n});<\/code><\/pre>\n<p>Ensuite, dirigez-vous vers <strong>package.json<\/strong> et modifiez le script de construction :<\/p>\n<pre><code class=\"language-json\">\"build\": \"vite build && vite build --ssr\"<\/code><\/pre>\n<p>Maintenant, si nous ex\u00e9cutons <code>npm run build<\/code>, Vite construira notre bundle SSR pour la production. Pour plus d&rsquo;informations \u00e0 ce sujet, vous pouvez visiter <a href=\"https:\/\/inertiajs.com\/server-side-rendering\">Inertia SSR DOCs<\/a> et <a href=\"https:\/\/laravel-vite.dev\/guide\/features\/ssr.html#building\">Vite SSR DOCs<\/a>.<\/p>\n<h3>Titre et m\u00e9ta<\/h3>\n<p>\u00c9tant donn\u00e9 que les applications JavaScript sont rendues dans le document <code>&lt;body&gt;<\/code>, elles ne peuvent pas rendre les balises dans le document <code>&lt;head&gt;<\/code> car elles sont en dehors de leur champ d&rsquo;application. Inertia poss\u00e8de un composant <code>&lt;Head&gt;<\/code> qui peut \u00eatre utilis\u00e9 pour d\u00e9finir la page <code>&lt;title&gt;<\/code>, les balises <code>&lt;meta&gt;<\/code> et d&rsquo;autres composants <code>&lt;head&gt;<\/code>.<\/p>\n<p>Pour ajouter l&rsquo;\u00e9l\u00e9ment <code>&lt;head&gt;<\/code> \u00e0 votre page, nous devons importer <code>&lt;Head&gt;<\/code> d&rsquo;Inertia comme nous l&rsquo;avons fait avec le composant <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>Nous pouvons \u00e9galement ajouter un titre global pour toutes les pages, cela ajoutera le nom de votre application \u00e0 c\u00f4t\u00e9 du titre sur chaque page. Nous avons d\u00e9j\u00e0 fait cela dans le fichier <strong>app.js<\/strong>:<\/p>\n<pre><code class=\"language-js\">createInertiaApp({\n    title: (title) =&gt; `${title} - ${appName}`,\n    \/\/\n});<\/code><\/pre>\n<p>Ce qui signifie que si nous ajoutons <code>&lt;Head title=\"Home\"&gt;<\/code> dans la page d&rsquo;accueil de notre application avec un titre, cela sera rendu comme ceci : <code>&lt;title&gt;Home - My App&lt;\/title&gt;<\/code>.<\/p>\n<h3>Surveillance de votre application<\/h3>\n<p>La vitesse est l&rsquo;un des facteurs les plus importants pour optimiser les performances de r\u00e9f\u00e9rencement de votre site web. Si vous utilisez WordPress pour votre site, pour cette raison, <a href=\"https:\/\/kinsta.com\/fr\/outil-apm\/\">Kinsta APM<\/a> vous aidera \u00e0 surveiller et \u00e0 garder un \u0153il sur votre application en action. Il vous aide \u00e0 identifier les probl\u00e8mes de performance de WordPress et est disponible gratuitement sur tous les sites h\u00e9berg\u00e9s par Kinsta.<\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>Inertia.js est l&rsquo;une des technologies les plus significatives disponibles ; m\u00e9langez-la avec Laravel et vous avez une application monopage moderne construite avec PHP et JavaScript. Taylor Otwell, le cr\u00e9ateur de Laravel, s&rsquo;int\u00e9resse tellement \u00e0 Inertia que Laravel a lanc\u00e9 ses kits de d\u00e9marrage les plus populaires, Laravel Breeze et Jetstream, avec le support d&rsquo;Inertia et de SSR.<\/p>\n\n<p>Si vous \u00eates un fan de Laravel ou un d\u00e9veloppeur professionnel, Inertia.js attirera sans aucun doute votre attention. Dans ce tutoriel, nous avons r\u00e9alis\u00e9 un blog tr\u00e8s basique et simple en quelques minutes seulement. Il y a encore beaucoup \u00e0 apprendre sur inertia, et ce n&rsquo;est peut-\u00eatre que le premier de nombreux articles et tutoriels.<\/p>\n<p>Quels autres aspects de Laravel aimeriez-vous que nous explorions ? Faites-le nous savoir dans la section des commentaires ci-dessous.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les applications multi-pages (Multi-Page-Applications ou MPA) perdent de leur popularit\u00e9 de jour en jour. Des plateformes c\u00e9l\u00e8bres comme Facebook, Twitter, YouTube, Github et bien d&rsquo;autres utilisent &#8230;<\/p>\n","protected":false},"author":266,"featured_media":65048,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[886,535,433,791,908],"topic":[986],"class_list":["post-64407","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-inertia-js","tag-javascript","tag-laravel","tag-php-frameworks","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>Comment utiliser Inertia.js dans vos projets Laravel<\/title>\n<meta name=\"description\" content=\"Dans cet article, nous allons explorer comment utiliser Inertia.js aux c\u00f4t\u00e9s de Laravel, Vue et Tailwind CSS pour cr\u00e9er une application web moderne.\" \/>\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\/fr\/blog\/inertia-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comment utiliser Inertia.js dans vos projets Laravel\" \/>\n<meta property=\"og:description\" content=\"Dans cet article, nous allons explorer comment utiliser Inertia.js aux c\u00f4t\u00e9s de Laravel, Vue et Tailwind CSS pour cr\u00e9er une application web moderne.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-12T15:18:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-03T02:21:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.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=\"Dans cet article, nous allons explorer comment utiliser Inertia.js aux c\u00f4t\u00e9s de Laravel, Vue et Tailwind CSS pour cr\u00e9er une application web moderne.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mostafa Said\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/\"},\"author\":{\"name\":\"Mostafa Said\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996\"},\"headline\":\"Comment utiliser Inertia.js dans vos projets Laravel\",\"datePublished\":\"2022-12-12T15:18:04+00:00\",\"dateModified\":\"2023-11-03T02:21:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/\"},\"wordCount\":4495,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png\",\"keywords\":[\"inertia.js\",\"JavaScript\",\"laravel\",\"php frameworks\",\"spa\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/\",\"name\":\"Comment utiliser Inertia.js dans vos projets Laravel\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png\",\"datePublished\":\"2022-12-12T15:18:04+00:00\",\"dateModified\":\"2023-11-03T02:21:04+00:00\",\"description\":\"Dans cet article, nous allons explorer comment utiliser Inertia.js aux c\u00f4t\u00e9s de Laravel, Vue et Tailwind CSS pour cr\u00e9er une application web moderne.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png\",\"width\":1460,\"height\":730,\"caption\":\"Comment utiliser Inertia.js dans vos projets Laravel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Comment utiliser Inertia.js dans vos projets Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"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\/fr\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996\",\"name\":\"Mostafa Said\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/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\/fr\/blog\/author\/mostafasaid\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Comment utiliser Inertia.js dans vos projets Laravel","description":"Dans cet article, nous allons explorer comment utiliser Inertia.js aux c\u00f4t\u00e9s de Laravel, Vue et Tailwind CSS pour cr\u00e9er une application web moderne.","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\/fr\/blog\/inertia-laravel\/","og_locale":"fr_FR","og_type":"article","og_title":"Comment utiliser Inertia.js dans vos projets Laravel","og_description":"Dans cet article, nous allons explorer comment utiliser Inertia.js aux c\u00f4t\u00e9s de Laravel, Vue et Tailwind CSS pour cr\u00e9er une application web moderne.","og_url":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2022-12-12T15:18:04+00:00","article_modified_time":"2023-11-03T02:21:04+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png","type":"image\/png"}],"author":"Mostafa Said","twitter_card":"summary_large_image","twitter_description":"Dans cet article, nous allons explorer comment utiliser Inertia.js aux c\u00f4t\u00e9s de Laravel, Vue et Tailwind CSS pour cr\u00e9er une application web moderne.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png","twitter_creator":"@kinsta_fr","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Mostafa Said","Dur\u00e9e de lecture estim\u00e9e":"25 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/"},"author":{"name":"Mostafa Said","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996"},"headline":"Comment utiliser Inertia.js dans vos projets Laravel","datePublished":"2022-12-12T15:18:04+00:00","dateModified":"2023-11-03T02:21:04+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/"},"wordCount":4495,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png","keywords":["inertia.js","JavaScript","laravel","php frameworks","spa"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/","url":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/","name":"Comment utiliser Inertia.js dans vos projets Laravel","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png","datePublished":"2022-12-12T15:18:04+00:00","dateModified":"2023-11-03T02:21:04+00:00","description":"Dans cet article, nous allons explorer comment utiliser Inertia.js aux c\u00f4t\u00e9s de Laravel, Vue et Tailwind CSS pour cr\u00e9er une application web moderne.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/12\/inertia-lavarel.png","width":1460,"height":730,"caption":"Comment utiliser Inertia.js dans vos projets Laravel"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/inertia-laravel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/fr\/sujets\/laravel\/"},{"@type":"ListItem","position":3,"name":"Comment utiliser Inertia.js dans vos projets Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","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\/fr\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996","name":"Mostafa Said","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/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\/fr\/blog\/author\/mostafasaid\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/64407","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/266"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=64407"}],"version-history":[{"count":17,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/64407\/revisions"}],"predecessor-version":[{"id":68796,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/64407\/revisions\/68796"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/translations\/dk"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64407\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/65048"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=64407"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=64407"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=64407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}