Utilizar rotas do Laravel no Vue

Para poder usar as rotas do Laravel no Vue, vamos utilizar o pacote

Começamos por instalar o pacote:

composer require tightenco/ziggy

Referência: https://github.com/tighten/ziggy

Inclua as rotas no seu ficheiro app.blade.php, logo antes da inclusão do Javascript:

    @routes
    @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot')))
        @vite(['resources/js/app.js'])
    @endif
    @inertiaHead
</head>

Lembre-se de recompilar os seus assets com npm run dev ou npm run build.

Vamos adicionar um alias para o path do plugin

No ficheiro vite.config.js:

// vite.config.js
import path from 'path';
(...)
export default defineConfig({
   plugins: [
      ...
   ],
   resolve: {
      alias: {
         'ziggy-js': path.resolve('vendor/tightenco/ziggy'),
      },
   },
});

Para o Vue, utilize o plugin Vue disponível.

Referência: https://github.com/tighten/ziggy?tab=readme-ov-file#vue

No ficheiro /resources/js/app.js, inclua:

import { ZiggyVue } from 'ziggy-js';
(...)
createApp(App).
    (...)
    .use(ZiggyVue)

O ficheiro final, app.js ficará desta forma:

import './bootstrap';
import '../css/app.css';
import { createApp, h } from 'vue'
import { createInertiaApp } from '@inertiajs/vue3'
import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'
import { ZiggyVue } from 'ziggy-js';

const appName = import.meta.env.VITE_APP_NAME || 'Laravel';

createInertiaApp({
    title: (title) => `${title} - ${appName}`,
    resolve: (name) => resolvePageComponent(`./Pages/${name}.vue`, import.meta.glob('./Pages/**/*.vue')),
    setup({ el, App, props, plugin }) {
        createApp({ render: () => h(App, props) })
            // Inertia plugin
            .use(plugin)
            // Ziggy plugin
            .use(ZiggyVue)
            // Mount the app
            .mount(el)
    },
})

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *