Reputation: 2233
This is simple but I can't seem to be able to do it with blade and I usually go back to php for this but, since I can't declare a new php variable with blade (without printing it, that is) how should I change a simple class name if a certain condition is met? Take this example of a link, I just want to add the class "active" if $hostess->active=1
{{ HTML::linkRoute('hostesses.index', 'Archived', $params, array('class' => 'btn btn-default')) }}
I know how to do this with php, but how would it be done with blade?
Upvotes: 33
Views: 74371
Reputation: 91
This is another way that you can try!
<li class="{{ Route::has('login') ? 'bg-dark' : '' }}"></li>
Upvotes: 0
Reputation: 4683
If you have a parameter in your query, then you could do something like this:
Your URL: https://www.yourdomain.com/a=dark
// Your blade file
<li class="{{ Request::get('a') == 'dark' ? 'active' : '' }}">
<a href="{{ url('foo/bar') }}"></i> Bar</a>
</li>
Upvotes: 0
Reputation: 6539
Now we can use conditional classes with @class
directive like this
@php
$isActive = false;
$hasError = true;
@endphp
<span @class([
'p-4',
'font-bold' => $isActive,
'text-gray-500' => ! $isActive,
'bg-red' => $hasError,
])></span>
https://laravel.com/docs/8.x/blade#conditional-classes
Upvotes: 22
Reputation: 1485
Here's a much more clear way to do that. Which should match the route name.
request()->routeIs('admin.cities')
Upvotes: 3
Reputation: 957
There is also another option:
<li class="@if(Request::is('/')) is-active @endif">
<a href="{{ route('index') }}">Home</a>
</li>
Upvotes: 11
Reputation: 1031
You could do this:
// App/Http/routes.php
Route::get('foo/bar', 'FooController@bar);
// Your blade file
<li class="{{ Request::path() == 'foo/bar' ? 'active' : '' }}">
<a href="{{ url('foo/bar') }}"></i> Bar</a>
</li>
Upvotes: 42
Reputation: 146221
Something like this?
{{ HTML::linkRoute('hostesses.index', 'Archived', $params, array('class' => $hostess->active ? 'btn btn-info' : 'btn btn-default')) }}
Upvotes: 10