Laravel has a great helper function underscores (__) that we can use for JSON-based translations. Laravel 5.6 default authentication blade files also make use of underscore helper function. Like this: 1. {{ __( 'Register' ) }}
You can use the @isset blade directive to check whether the variable is set or not. Alternatively, if you have the default value for that variable you can directly use it as {{ $vatiable ?? 'default_value' }} .
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.
There is a simple workaround that doesn't require you to change any code, and it works in Laravel 4 just as well.
You just use an assignment operator (=
) in the expression passed to an @if
statement, instead of (for instance) an operator such as ==
.
@if ($variable = 'any data, be it string, variable or OOP') @endif
Then you can use it anywhere you can use any other variable
{{ $variable }}
The only downside is your assignment will look like a mistake to someone not aware that you're doing this as a workaround.
Ya'll are making it too complicated.
Just use plain php
<?php $i = 1; ?>
{{$i}}
donesies.
(or https://github.com/alexdover/blade-set looks pretty straighforward too)
We're all kinda "hacking" the system by setting variables in views, so why make the "hack" more complicated then it needs to be?
Tested in Laravel 4.
Another benefit is that syntax highlighting works properly (I was using comment hack before and it was awful to read)
Since Laravel 5.2.23, you have the @php Blade directive, which you can use inline or as block statement:
@php($old_section = "whatever")
or
@php
$old_section = "whatever"
@endphp
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With