joserick / laravel-livewire-discover
Discover and autoload multiples components of livewire by convention (componentNamespace)
Installs: 11 722
Dependents: 1
Suggesters: 0
Security: 0
Stars: 20
Watchers: 2
Forks: 1
Open Issues: 1
Type:package
Requires
- livewire/livewire: ^3.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- laravel/pint: ^1.18
- orchestra/testbench: ^8.5
- pestphp/pest: ^2.35
README
Laravel Livewire Discover
Notice: Migration to v1.0 || I need previous version (v0.3)
Automatically discover and load/register multiple/different class namespaces for Livewire components.
Installation
You can add the package via composer:
composer require joserick/laravel-livewire-discover
And then install the package with artisan:
php artisan livewire-discover:install
Enjoying this package? 
Config
Add to LivewireDiscoverServiceProvider.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/livewire-discover.php'
// Load the namespace to Livewire components. 'class_namespaces' => [ // 'prefix' => 'class\\namespace', 'my-components' => 'Namespaces\\Livewire', 'new-components' => 'User\\Repository\\Livewire', ],
Use
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
Extra
Displays the list of loaded namespaces (prefix, aliases and paths)
If you want to check if all the namespaces are loading correctly you can run:
php artisan livewire-discover:list
Which will show you a table with all the information:
Livewire-Discover namespaces list: Prefix: 'my-components' (Namespaces\\Livewire) There is no "class path" defined for the config for prefix 'my-components' Getting the "class path" from the composer autoload file +-----------------------+-----------------------------------------------+ | Alias | Paths | +-------------------------------------------+---------------------------+ | my-components.devices | /var/www/html/namespaces/livewire/devices.php | +-----------------------+-----------------------------------------------+
Create your components quickly
You can create the files automatically using the following Artisan command. In the process it will ask you for the prefix to use.
php artisan livewire-discover:make RegisterAdmin
# Or
php artisan make:livewire-discover RegisterAdmin
If you prefer kebab-cased names, you can use them as well:
php artisan livewire-discover:make 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 livewire-discover:make Auth\\RegisterAdmin
php artisan livewire-discover:make auth.register-admin
Also if you don't want it to constantly ask you which prefix to select you can pass it directly with the --prefix
attribute
Manually configure the 'classpath' for component creation and listing
When automatically created components through the artisan livewire-discover:make
this obtains the directory path based on 'Composer Autoload File' If for some reason it is not possible to do this, you can manually configure the path, adding it as the third parameter:
Livewire::discover( 'my-components', 'Namespaces\\Livewire', app_path('/Path/Livewire') // <-- Components directory path );
Now when you create the component it will be created in the path you have specified.
Config 'view path' for component creation
Do you also want it to create the view
at a specific route? Just add the view route and it will automatically create it, simple as that:
Livewire::discover( 'my-components', 'Namespaces\\Livewire', app_path('/Path/Livewire') resource_path('/views/path/livewire'), <-- Components views path );
Remember that these are examples, you can specify any path within your project and it will create it.
Migration to v1
Rename Config File
The configuration file name has changed from laravel-livewire-discover.php
to simply livewire-discover-php
Attributes Reversed
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.
Dot-Notation
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 />
I need for v0.3.2
composer require joserick/laravel-livewire-discover:0.3.2
License
The GNU Public License (GPLv3). Please see License File for more information.