tanthammar / livewire-auto-routes
Auto generate routes for Laravel Livewire Components.
Installs: 80
Dependents: 0
Suggesters: 0
Security: 0
Stars: 20
Watchers: 1
Forks: 1
Open Issues: 0
Type:package
Requires
- php: ^8.0
- illuminate/support: ^8.0
- livewire/livewire: ^2.4|dev-master
Requires (Dev)
- orchestra/testbench: ^6.0
This package is auto-updated.
Last update: 2024-11-16 16:12:36 UTC
README
Auto generate routes for Laravel Livewire Components.
Requirements
- Livewire 2
- Laravel 8
- php 8
Use Spatie pkg
I recommend that you try Spatie Laravel Route Attributes before installing this package.
Installation
composer require tanthammar/livewire-auto-routes
Routes in web.php
takes precedence!
You can use web.php as normal. Routes declared in your Livewire components are registered after the routes in web.php.
Usage
- You generate routes via traits or by adding a
route()
method to your Livewire component. - Your Livewire components can exist in any folder inside the
app
namespace. - If you don't add any of the traits or the
route()
method, the Livewire component is treated just as a normal component, thus ignored by this package.
Guest route Trait
- Applies the
guest
middleware. - The property is used to generate both the route name and url.
use Tanthammar\LivewireAutoRoutes\HasGuestRoute; class FooComponent extends \Livewire\Component { use HasGuestRoute; protected string $guestRoute = '/foo/{id}/edit'; //route name becomes 'foo.id.edit' }
Auth route Trait
- Applies the
auth
middleware. - The property is used to generate both the route name and url.
use Tanthammar\LivewireAutoRoutes\HasAuthRoute; class FooComponent extends \Livewire\Component { use HasAuthRoute; protected string $authRoute = '/foo/{name?}'; //route name becomes 'foo.name' }
Custom routes
Option 1
Declare the route just like you would in web.php
use Illuminate\Support\Facades\Route; class FooComponent extends \Livewire\Component { public function route(): \Illuminate\Routing\Route|array { return Route::get('foo', static::class) ->middleware('auth') //default middleware is 'web' ->name('foo'); } }
Option 2, use the RouteMaker
The RouteMaker can auto-generate the route name from the route definition, but it's optional.
use Tanthammar\LivewireAutoRoutes\RouteMaker; class FooComponent extends \Livewire\Component { public function route(): RouteMaker { return new RouteMaker( route: 'users/{id}/edit', //if you omit $name, this route name will become 'users.id.edit' middleware: ['auth:sanctum', 'verified'], component: static::class, name: 'users.edit' //OPTIONAL, else $name will be generated from $route ); } }
Routes are registered in alphabetical order!
Livewire component FILES are looped in alphabetical order in the app namespace
.
One way to control the load order is to group your components in subfolders with suitable names
like routeGroupA
, routeGroupB
, where routes in "routeGroupA" would be registered before "routeGroupB".
Example using the Traits
It's recommended to keep a controlled naming structure to avoid route conflicts. Use the RouteMaker
if you want better naming.
💬 Let's connect
Discuss with other tall-form users on the official Livewire Discord channel. You'll find me in the "partners/tall-forms" channel.
Changelog
Please see CHANGELOG for more information what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security-related issues, please open an issue.
License
The MIT License (MIT). Please see License File for more information.