DEV Community

Cover image for Dynamic Render Inertia from different file path in using Laravel
Harry
Harry

Posted on

3

Dynamic Render Inertia from different file path in using Laravel

I haven't written a blog post in a long time due to some personal issues. But today, I'm writing about how to dynamically render your Vue files inertia from different folder paths in inertia.

Before going to actual topic let's me example what is inertia. Inertia is a framework that makes it easy to build modern single-page applications with Laravel. Inertia works by sending data from your server-side controller to your client-side JavaScript application as props. These props can then be used in your client-side view components to display data or update the UI. By default inertia render app.blade.php as root file but you can modified it. Okay!!Let's go to actual topic.

This blog post is for someone who is facing this for the first time when they start working on Inertia. Here are the steps you need to follow.

Step 1

In your app.js inside resources/js



import { createApp, h } from 'vue'
import { createInertiaApp } from '@inertiajs/vue3'

createInertiaApp({
  resolve: name => {
    //here below two lines you need to make some changes
    const pages = import.meta.glob('./Pages/**/*.vue', { eager: true })
    return pages[`./Pages/${name}.vue`]
  },
  setup({ el, App, props, plugin }) {
    createApp({ render: () => h(App, props) })
      .use(plugin)
      .mount(el)
  },
})


Enter fullscreen mode Exit fullscreen mode

Step 2

You have to modified like this.




import { createApp, h } from 'vue'
import { createInertiaApp } from '@inertiajs/vue3'

createInertiaApp({
  resolve: name => {
    //here below two lines you need to make some changes
    // name means full file path of your vue's file location
    const page = await import(`../../${name}.vue`,{
                eager: true,
            })
return page.default;
  },
  setup({ el, App, props, plugin }) {
    createApp({ render: () => h(App, props) })
      .use(plugin)
      .mount(el)
  },
})



Enter fullscreen mode Exit fullscreen mode

Step 3

You have have to pass your **vue** path from controller as below





namespace Src\ModuleName\User\Presentation\HTTP;

use Inertia\Inertia;
use App\Http\Controllers\Controller;


class UserController extends Controller
{

    public function index()
    { 
     //full path of your vue file path you need to configure
     return Inertia::render('src/ModuleName/User/Presentation/Resources/Index'); 
   }

}



Enter fullscreen mode Exit fullscreen mode

I am give my screenshot of my folder structure .As below

Image description

If you have any questions about this topic, please feel free to leave a comment below or on my twitter handle @hareom284. I'm always happy to help!. Happy to share your though. Thanks for reading!

SurveyJS custom survey software

Build Your Own Forms without Manual Coding

SurveyJS UI libraries let you build a JSON-based form management system that integrates with any backend, giving you full control over your data with no user limits. Includes support for custom question types, skip logic, an integrated CSS editor, PDF export, real-time analytics, and more.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs