Automatically discover and load/register multiple/different class namespaces for Livewire components.
GPL-3.0 License
Notice: Migration to v1.0 || I need previous version (v0.3)
Automatically discover and load/register multiple/different class namespaces for Livewire components.
You can install the package via composer:
composer require joserick/laravel-livewire-discover
Add to AppServiceProvider.php
public function boot(): void
{
// Load multiples namespace for Livewire components.
Livewire::discovers([
'my-components', 'Namespaces\\Livewire',
'new-components', 'User\\Repository\\Livewire',
]);
// Or individually
Livewire::discover('my-components', 'Namespaces\\Livewire');
Livewire::discover('new-components', 'User\\Repository\\Livewire');
}
Or if you like, use "componentNamespace" function as in Blade Templates
public function boot(): void
{
// Load multiples namespace for Livewire components.
Livewire::componentNamespace('Namespaces\\Livewire', 'my-components');
Livewire::componentNamespace('User\\Repository\\Livewire', 'new-components');
// ...
}
Or use the config: 'config/laravel-livewire-discover.php'
php artisan vendor:publish --tag livewire-discover-config
// Load the namespace to Livewire components.
'class_namespaces' => [
// 'prefix' => 'class\\namespace',
'my-components' => 'Namespaces\\Livewire',
'new-components' => 'User\\Repository\\Livewire',
],
Call Livewire Components:
<livewire:my-components.devices /> <!-- Class: Namespace\Livewire\Devices; -->
<livewire:new-components.auth.login /> <!-- Class: User\Repository\Livewire\Auth\Login; -->
<livewire:new-components.auth.register-admin /> <!-- Class: User\Repository\Livewire\Auth\RegisterAdmin; -->
Or use form Routes:
// Load Livewire Component from Route
use Namespaces\Livewire\Devices;
use User\Repository\Livewire\DevicesTable;
Route::get('/devices', Devices::class); // resolve name my-components.devices
Route::get('/devices_table', DevicesTable::class); // resolve name new-components.devices-table
"Obviously" you need to install the "layout" first for the Routes
php artisan livewire:layout
If you would like to automatically create components in a specific directory based on the prefix, you can configure it in the following way:
public function boot(): void
{
Livewire::discover('my-components', 'Namespaces\\Livewire', '/path/livewire');
}
You can create the files automatically using the following Artisan command. In the process it will ask you for the prefix to use, don't forget to put the path in the prefix settings.
php artisan make:livewire-discover RegisterAdmin
If you prefer kebab-cased names, you can use them as well:
php artisan make:livewire-discover register-admin
You may use namespace syntax or dot-notation to create your components in sub-directories. For example, the following commands will create a RegisterAdmin
component in the Auth
sub-directory:
php artisan make:livewire-discover Auth\\RegisterAdmin
php artisan make:livewire-discover auth.register-admin
Replace Livewire::discover
for Livewire::componentNamespace
since the attributes in v1 are reversed but the componentNamespace
function maintains the structure of previous versions.
Livewire::discover('Namespaces\\Livewire', 'my-components');
to
Livewire::componentNamespace('Namespaces\\Livewire', 'my-components');
or in any case to maintain the use of the discover()
function you can invert the parameters.
Change in concatenation of prefixes with class name, previously it was concatenated using the "-" notation, now the dot-notation is used, so it must be changed in all calls to Livewire-Discover components
<livewire:components-devices />
to
<livewire:components.devices />
composer require joserick/laravel-livewire-discover:0.3.2
The GNU Public License (GPLv3). Please see License File for more information.