--- name: folio-routing description: "Use this skill for Laravel Folio file-based routing tasks: creating pages with `folio:page`, setting up route parameters or model binding in filenames like `[User].blade.php`, defining named routes with `name()`, applying middleware, debugging Folio 404s, or running `folio:list`. Also trigger when a user is choosing between Folio and web.php for a new page, or wants to add a new URL or page in a Folio-enabled project (`resources/views/pages`). Folio automatically maps Blade templates to routes. Do not trigger for Livewire component, Normal Routing, Standard controller routes, or API endpoints" license: MIT metadata: author: laravel --- @php /** @var \Laravel\Boost\Install\GuidelineAssist $assist */ @endphp # Folio Routing ## Documentation Use `search-docs` for detailed Folio patterns and documentation. ## Basic Usage Laravel Folio is a file-based router that creates a new route for every Blade file within the configured directory. Pages are usually in `resources/views/pages/` and the file structure determines routes: - `pages/index.blade.php` → `/` - `pages/profile/index.blade.php` → `/profile` - `pages/auth/login.blade.php` → `/auth/login` ### Listing Routes You may list available Folio routes using `{{ $assist->artisanCommand('folio:list') }}`. ### Creating Pages Always create new `folio` pages and routes using `{{ $assist->artisanCommand('folio:page [name]') }}` following existing naming conventions. @boostsnippet("Example folio:page Commands for Automatic Routing", "shell") // Creates: resources/views/pages/products.blade.php → /products {{ $assist->artisanCommand('folio:page "products"') }} // Creates: resources/views/pages/products/[id].blade.php → /products/{id} {{ $assist->artisanCommand('folio:page "products/[id]"') }} // Creates: resources/views/pages/users/[User].blade.php → /users/{user} (implicit model binding) {{ $assist->artisanCommand('folio:page "users/[User]"') }} @endboostsnippet ## Route Parameters vs. Model Binding Use the correct filename token based on intent: - `[id]` (lowercase) captures a plain route parameter string - `[User]` (capitalized model class) enables implicit Eloquent model binding - `[Post:slug]` binds by a custom key instead of `id` Model binding is case-sensitive in the filename. Avoid `[user]` when you expect a `User` model instance. @boostsnippet("Route Parameter vs Model Binding Example", "blade") {{-- pages/users/[id].blade.php --}}
User ID: {{ $id }}
{{-- pages/users/[User].blade.php --}}
User ID: {{ $user->id }}
@endboostsnippet ## Named Routes Add a `name` at the top of each new Folio page to create a named route that other parts of the codebase can reference. @boostsnippet("Named Routes Example", "php") use function Laravel\Folio\name; name('products.index'); @endboostsnippet ## Middleware @boostsnippet("Middleware Example", "php") use function Laravel\Folio\{name, middleware}; name('admin.products'); middleware(['auth', 'verified']); @endboostsnippet ## Page Content Patterns Folio pages are normal Blade files. Include practical data-loading code when creating or editing pages. @boostsnippet("Inline Query Example in a Folio Page", "blade") @php use App\Models\Post; $posts = Post::query() ->whereNotNull('published_at') ->latest('published_at') ->get(); @endphp @endboostsnippet @boostsnippet("Render Hook Example for View Data", "php")
Fatal error: Uncaught Error: Call to undefined function Laravel\Folio\render() in C:\laragon\htdocs\eloboost24\vendor\laravel\boost\.ai\folio\skill\folio-routing\SKILL.blade.php:110 Stack trace: #0 {main} thrown in C:\laragon\htdocs\eloboost24\vendor\laravel\boost\.ai\folio\skill\folio-routing\SKILL.blade.php on line 110