I'm newbie in Laravel, researched but i can't find a solution for something so simple. I created a custom directive namely "test" for Blade in the app/Providers/AppServiceProvider.php file:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Blade; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Blade::directive('test', function($expression){ // Dumps as well: "$var1 , $var2" dump($expression); list($arg1, $arg2) = explode(',',str_replace(['(',')',' '], '', $expression)); // will print: $var1 , $var2 return "<?php echo '$arg1 , $arg2'; ?>"; }); } /** * Register any application services. * * @return void */ public function register() { // } } Theoretically, its usage should be very simple inside a blade template, however as shown in the following example the directive is printing the literal value of the arguments e.g $var1 is printing $var1 instead of its real content "test a":
<?php $var1 = 'test a'; $var2 = 'test b'; ?> // Prints: $var1 , $var2 // Expected: "test a test b" @test($var1 , $var2) Already tried to print their values using multiple tags:
@test( {{ $var1 }}, {{ $var2 }}) @test( {!! $var1 !!}, {!! $var2 !!}) @test( {{{ $var1 }}}, {{{ $var2 }}}) But doesn't work neither, the directive is always receiving the name of the variable instead of its content. What am I ignoring in this case? Any help is appreciated. I am using Laravel 5.4.*.
return "<?php echo $arg1 . ' ' . $arg2; ?>";