To create and use custom Blade directives in Laravel to simplify template code, you can follow these steps:
Create a new service provider: Run the following command in the terminal to generate a new service provider class:
php artisan make:provider BladeServiceProvider
Open the app/Providers/BladeServiceProvider.php
file and update the register
method to define your custom Blade directives. For example, let's create a directive to check if a user has a certain role:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class BladeServiceProvider extends ServiceProvider
{
public function register()
{
Blade::directive('role', function ($role) {
return "<?php if(auth()->check() && auth()->user()->hasRole($role)): ?>";
});
Blade::directive('endrole', function () {
return "<?php endif; ?>";
});
}
}
Register the service provider: Open the config/app.php
file and add your BladeServiceProvider
to the $providers
array:
'providers' => [
// ...
App\Providers\BladeServiceProvider::class,
],
Use the custom directive in your Blade templates: You can now use the newly created @role
directive in your Blade templates to simplify conditional code. For example:
@role('admin')
<p>Welcome, admin!</p>
@endrole
Note: In the above example, auth()->user()->hasRole($role)
is a fictional method that you would need to implement yourself to check if the current authenticated user has the specified role.
By creating and using custom Blade directives, you can abstract complex logic into reusable and readable code snippets, making your templates cleaner and more maintainable.