Routes

Protected

Protected routes can only be accessed by users logged in to Voyager.
To implement protected routes into your plugin implement the ProtectedRoutes trait and write a method provideProtectedRoutes registering your routes:

<?php

use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
use Voyager\Admin\Contracts\Plugins\Features\Provider\ProtectedRoutes;

class MyPlugin implements ProtectedRoutes
{
    public function provideProtectedRoutes(): void
    {
        Route::get('/my-page', function () {
            return Inertia::render('component-to-render', [
                'foo'   => 'bar',
            ])->withViewData('title', 'My page');
        })->name('my-page');

        Route::post('/my-page', function () {
            // Do something
        })->name('my-page');
    }
}

INFO

This example shows an Inertia response that will show a Vue component inside Voyagers master-view.
However, you can return whatever you want, a blade-view for example.

Frontend

Frontend routes can be accessed by everyone. You don't have to be logged in to Voyager to access those pages.
To implement protected routes into your plugin implement the FrontendRoutes trait and write a method provideFrontendRoutes registering your routes:

<?php

use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
use Voyager\Admin\Contracts\Plugins\Features\Provider\FrontendRoutes;

class MyPlugin implements FrontendRoutes
{
    public function provideFrontendRoutes(): void
    {
        Route::get('/my-page', function () {
            return view('my-view');
        })->name('my-page');

        Route::post('/my-page', function () {
            // Do something
        })->name('my-page');
    }
}

INFO

You are not able to display a component/view inside Voyagers master-view as this uses some data that is not available when the user is not logged-in.