Question

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?

Was it helpful?

Solution 4

Something like this?

{{ HTML::linkRoute('hostesses.index', 'Archived', $params, array('class' => $hostess->active ? 'btn btn-info' : 'btn btn-default')) }}

OTHER TIPS

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>

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

There is also another option:

<li class="@if(Request::is('/')) is-active @endif">
    <a href="{{ route('index') }}">Home</a>
</li>

Here's a much more clear way to do that. Which should match the route name.

request()->routeIs('admin.cities')

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>

This is another way that you can try!

<li class="{{ Route::has('login') ? 'bg-dark' : ''  }}"></li>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top