intrfce/laravel-inertia-components
| Install | |
|---|---|
composer require intrfce/laravel-inertia-components |
|
| Latest Version: | v0.1.1 |
| PHP: | ^8.2.0 |
| Laravel: | 11 |
| License: | proprietary |
| Last Updated: | Sep 2, 2024 |
| Links: | GitHub · Packagist |
Laravel Inertia Components
[!WARNING]
This package is in a pre-release state and the API may change.
This package allows you to create Livewire-style class components for your InertiaJS applications.
Features:
- ✅ Define HTTP-named resourceful style methods for
show/store/update/destroyright in the same class. - ✅ Any
publicproperties or methods pass data back to your components. - ✅ Attributes to mark public methods as
#[Lazy]or#[Always] - ✅ Create methods that auto-wire their own routes by using the
#[PostAction],#[GetAction]etc Attributes. - ⌛ Create components with
php artisan make:inertia - ✅
Route::inertiahelper.
Why?
- Better organisation and encapsulation of code.
- Reduce clutter in your route files.
HTTP/Resourceful Methods.
The base class reserves four public method names to use and their corresponding HTTP methods:
| Method Name | HTTP Method |
|---|---|
| show | GET |
| store | POST |
| update | PATCH/PUT |
| destroy | DELETE |
Each of these methods behaves just like a controller method should, so you can inject route parameters and dependencies as needed:
public function show(Request $request, string $id, ModelName $model): array {}
Returning data from show()
The show method is used when your route is hit with a GET request.
If you return an array from this method, it will be merged with the rest of the public properties and methods, you can also
use the usual Inertia::lazy and Inertia::always closures from here too.
Autowiring HTTP Methods.
If you need to call another route that's non-RESTful or tangential to the resource you're showing, you can use autowiring methods, these will register the route for you with either an automatic or user-given URL.
For example, showing a list of blog posts on your show route, but want the ability to send a quick AJAX request to toggle
the post as published or unpublished?
Setup a function in your component, and add the appropriate HTTP method action attribute to it:
#[PatchAction(url:'/{post}/toggle-published')]
function togglePublished(BlogPost $post) {
$post->published = !$post->published;
$post->save();
return redirect()->back();
}
Assuming your component was registered with a path like /posts, this would automatically register a route at
POST posts/{post}/toggle-published for you.
Note: if you use the
#[GetAction]attribute, you shouldn't return an Inertia::response() from it - if you want to do that, use another fully registered route instead.
Full (WIP) Example:
<?php
class Dashboard extends Intrfce\InertiaComponents\InertiaComponent {
// A template is required, or an exception will be thrown.
protected $template = 'Dashboard/Index';
// Any public properties are passed to inertia.
public string $name = 'Dan';
// As are any public methods.
public function email(): string
{
return 'dan@hello.com';
}
// You can mark any method as Inertia::lazy() with the #[Lazy] Attribute:
#[Lazy]
public function blogPosts(): Collection
{
return BlogPosts::all();
}
// You can mark any method as Inertia::always() with the #[Always] Attribute:
#[Always]
public function age(): int
{
return 36;
}
/** GET /dashboard */
public function show(Request $request) {}
/** POST /dashboard */
public function store(Request $request) {}
/** PUT/PATCH /dashboard */
public function update(Request $request) {}
/** DELETE /dashboard */
public function destroy(Request $request) {}
/** GET /dashboard/your-route - Autowired */
#[GetAction('your-route')]
public function getMoreStuff()
{
}
/** POST /dashboard/your-route - Autowired */
#[GetAction('your-route')]
public function postMoreStuff()
{
}
/** PATCH /dashboard/patch-more-stuff - Autowired - notice the route URL derived from the function name */
#[PatchAction()]
public function patchMoreStuff()
{
}
/** DELETE /dashboard/{item}/delete - Autowired */
#[DeleteAction('{item}/delete')]
public function deleteAnItem(ItemModel $item)
{
}
}
Related Packages
Powerful PHP database abstraction layer (DBAL) with many features for database s...
Laravel Serializable Closure provides an easy and secure way to serialize closur...
Cli error handling for console/command-line PHP applications.
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| v0.1.1 | ^8.2.0 | ^11.0.0 | proprietary |