How to Set Variables in a Laravel Blade Template
LARAVEL 5.5 AND UP
Use the full form of the blade directive:
@php$i = 1@endphp
LARAVEL 5.2 - 5.4
You can use the inline tags:
@php ($i = 1)
Or you can use it in a block statement:
@php$i = 1@endphp
ADD A 'DEFINE' TAG
If you want to use custom tags and use a @define instead of @php, extend Blade like this:
/*|--------------------------------------------------------------------------| Extend blade so we can define a variable| <code>| @define $variable = "whatever"| </code>|--------------------------------------------------------------------------*/\Blade::extend(function($value) { return preg_replace('/\@define(.+)/', '<?php ${1}; ?>', $value);});
Then do one of the following:
Quick solution: If you are lazy, just put the code in the boot() function of the AppServiceProvider.php.
Nicer solution:Create an own service provider. See https://stackoverflow.com/a/28641054/2169147 on how to extend blade in Laravel 5. It's a bit more work this way, but a good exercise on how to use Providers :)
LARAVEL 4
You can just put the above code on the bottom of app/start/global.php (or any other place if you feel that is better).
After the above changes, you can use:
@define $i = 1
to define a variable.
It is discouraged to do in a view so there is no blade tag for it.If you do want to do this in your blade view, you can either just open a php tag as you wrote it or register a new blade tag. Just an example:
<?php/** * <code> * {? $old_section = "whatever" ?} * </code> */Blade::extend(function($value) { return preg_replace('/\{\?(.+)\?\}/', '<?php ${1} ?>', $value);});
In laravel-4, you can use the template comment syntax to define/set variables.
Comment syntax is {{-- anything here is comment --}}
and it is rendered by blade engine as
<?php /* anything here is comment */ ?>
so with little trick we can use it to define variables, for example
{{-- */$i=0;/* --}}
will be rendered by bladeas <?php /* */$i=0;/* */ ?>
which sets the variable for us. Without changing any line of code.