Additional anonymous component paths in Laravel 9.x
Anonymous components are a great way to create reusable components in Laravel. Essentially, you can create an anonymous component without creating an associated class. For example, you can do something like this.
<x-alert>
<x-slot name="title">
Error
</x-slot>
<x-slot name="message">
Something went wrong.
</x-slot>
</x-alert>
As you can tell, the above code will render the alert component. However, you don’t have to create a class for the alert component. You can simply create an alert.blade.php file in the resources/views/components directory and use it as an anonymous component.
Also, notice it’s important that you put all your anonymous components in the resources/views/components directory. But sometimes, you may want to put your anonymous components in a different directory. For example, you may want to put all your anonymous components in the resources/views/anonymous-components directory.
That’s where the newly added anonymousComponentPath method comes into play.
The anonymousComponentPath method
The anonymousComponentPath method is a new method added to Laravel 9.x that can be accessed through the Illuminate\Support\Facades\Blade facade. This method allows you to register additional anonymous component paths apart from the resources/views/components directory.
For example, you can register the resources/views/anonymous-components directory as an additional anonymous component path in the AppServiceProvider’s boot method like so.
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::anonymousComponentPath(__DIR__.'/../anonymous-components');
}
You can register as many additional anonymous component paths as you want. This can be useful when you want to organize your anonymous components in their respective directories based on their purpose.
Namespacing anonymous components
Additionally, you can also specify a namespace for the anonymous component path by passing it as the second argument to the anonymousComponentPath method like so.
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::anonymousComponentPath(
__DIR__.'/../payment-components',
'payment'
);
}
And then, you can use the payment namespace to access the anonymous components in the resources/views/payment-components directory like so.
<x-payment:alert>
<x-slot name="title">
Error
</x-slot>
<x-slot name="message">
Something went wrong.
</x-slot>
</x-payment:alert>
👋 Hi there! This is Amit, again. I write articles about all things web development. If you enjoy my work (the articles, the open-source projects, my general demeanour... anything really), consider leaving a tip & supporting the site. Your support is incredibly appreciated!