359

I am using Laravel 4. I would like to access the current URL inside an @if condition in a view using the Laravel's Blade templating engine but I don't know how to do it.

I know that it can be done using something like <?php echo URL::current(); ?> but It's not possible inside an @if blade statement.

Any suggestions?

1
  • did any answer below help with your issue ? Commented Feb 20, 2020 at 8:53

30 Answers 30

444

You can use: Request::url() to obtain the current URL, here is an example:

@if(Request::url() === 'your url here')
    // code
@endif

Laravel offers a method to find out, whether the URL matches a pattern or not

if (Request::is('admin/*'))
{
    // code
}

Check the related documentation to obtain different request information: http://laravel.com/docs/requests#request-information

Sign up to request clarification or add additional context in comments.

9 Comments

<li{{ (Request::is('admin/dashboard') ? ' class="active"' : '') }}> i tried this, failed :x
In my case I was using a starting / for the URL, removing it would solve the issue
I use the next format for it: <li{!! (Request::url() == url('/')) ? ' class="active"' : '' !!}> , because the format with {{ some_code }} use string encoding.
url() now returns a builder instance. must use url()->current()
Although I upvoted this a long time ago, today I was having trouble with it on Laravel 5.7 and eventually got this to work instead: @if (Request::path() != 'login'). Notice the lack of slash before "login", too.
|
116

You can also use Route::current()->getName() to check your route name.

Example: routes.php

Route::get('test', ['as'=>'testing', function() {
    return View::make('test');
}]);

View:

@if(Route::current()->getName() == 'testing')
    Hello This is testing
@endif

6 Comments

FYI, Route::is('testing') is the same as Route::current()->getName() == 'testing'.
@Hkan No both are different, Route::is('testing') ->> testing it will not work Route::is('test') ->> test it will work Route::current()->getName() == 'testing' alias and url are differents
@Naveen nope, Route::is() checks for the route name, not the path.
also shorthand Route::currentRouteName()
@Hkan Yeah, but that wouldn't work when working with parameters in your URL, for example, tokens ...
|
79

Maybe you should try this:

<li class="{{ Request::is('admin/dashboard') ? 'active' : '' }}">Dashboard</li>

Comments

77

To get current url in blade view you can use following,

<a href="{{url()->current()}}">Current Url</a>

So as you can compare using following code,

@if (url()->current() == 'you url')
    //stuff you want to perform
@endif

3 Comments

If you need to get the query string in the blade as well then you can use request()->getQueryString() which is very helpful in conjunction with url()->current() as that leaves off the query string.
``` @if(url()->current() == '/admin/search-result' ``` I used this code but it doesn't work?
@MahdiSafari in that case just write @if(Request::is('admin/search-result'))
55

I'd do it this way:

@if (Request::path() == '/view')
    // code
@endif

where '/view' is view name in routes.php.

5 Comments

How to tell if the current dir is home? I mean, public/. Ahh, i got it, i just type =='public'
If home dir is '/' in route.php, you just write == '/')
How would you make it work with the parameters as well? Not only the route name.
You can concatenate parameters in many ways after route name, depending on how you configured your routes.
I do it like this: Request::url() - than you get the complete URL
29

This is helped to me for bootstrap active nav class in Laravel 5.2:

<li class="{{ Request::path() == '/' ? 'active' : '' }}"><a href="/">Home</a></li>
<li class="{{ Request::path() == 'about' ? 'active' : '' }}"><a href="/about">About</a></li>

3 Comments

Thank you, I knew the code but Google got me here in 5 seconds haha.
Also this same working with laravel 4.2 and it's working good. Thank you
Also working on Laravel 5.6, thanks... this just saved me from making navs for each view :D
20

A little old but this works in L5:

<li class="{{ Request::is('mycategory/', '*') ? 'active' : ''}}">

This captures both /mycategory and /mycategory/slug

1 Comment

I'm using {{ Request::is('clientes/*') ? 'active' : ''}}
20

You will get the url by using the below code.

For Example your URL like https//www.example.com/testurl?test

echo url()->current();
Result : https//www.example.com/testurl

echo url()->full();
Result: https//www.example.com/testurl?test

Comments

19

You can use this code to get current URL:

echo url()->current();

echo url()->full();

I get this from Laravel documents.

Comments

18

Laravel 5.4

Global functions

@if (request()->is('/'))
    <p>Is homepage</p>
@endif

2 Comments

This does not always work if you're dealing with query string like so domain.com/?page_id=1, domain.com/?page_id=2, as those URLs also equal as "/"
I used request()->routeIs('...')
15

I personally wouldn't try grabbing it inside of the view. I'm not amazing at Laravel, but I would imagine you'd need to send your route to a controller, and then within the controller, pass the variable (via an array) into your view, using something like $url = Request::url();.

One way of doing it anyway.

EDIT: Actually look at the method above, probably a better way.

Comments

14

For me this works best:

class="{{url()->current() == route('dashboard') ? 'bg-gray-900 text-white' : 'text-gray-300'}}"

Comments

12

A simple navbar with bootstrap can be done as:

    <li class="{{ Request::is('user/profile')? 'active': '' }}">
        <a href="{{ url('user/profile') }}">Profile </a>
    </li>

Comments

10

The simplest way is

<li class="{{ Request::is('contacts/*') ? 'active' : '' }}">Dashboard</li>

This colud capture the contacts/, contacts/create, contacts/edit...

Comments

10

1. Check if URL = X

Simply - you need to check if URL is exactly like X and then you show something. In Controller:

if (request()->is('companies')) {
  // show companies menu or something
}

In Blade file - almost identical:

@if (request()->is('companies'))
  Companies menu
@endif

2. Check if URL contains X

A little more complicated example - method Request::is() allows a pattern parameter, like this:

if (request()->is('companies/*')) {
  // will match URL /companies/999 or /companies/create
}

3. Check route by its name

As you probably know, every route can be assigned to a name, in routes/web.php file it looks something like this:

Route::get('/companies', function () {
  return view('companies');
})->name('comp');

So how can you check if current route is 'comp'? Relatively easy:

if (\Route::current()->getName() == 'comp') {
  // We are on a correct route!
}

4. Check by routes names

If you are using routes by names, you can check if request matches routes name.

if (request()->routeIs('companies.*')) {
  // will match routes which name starts with companies.
}

Or

request()->route()->named('profile')

Will match route named profile. So these are four ways to check current URL or route.

source

1 Comment

The question is about Laravel 4, and this is based on a tutorial for Laravel 9. Request::is('companies') is how it's done in Laravel 4.
9

The simplest way is to use: Request::url();

But here is a complex way:

URL::to('/').'/'.Route::getCurrentRoute()->getPath();

Comments

9

There are two ways to do that:

<li{!!(Request::is('your_url')) ? ' class="active"' : '' !!}>

or

<li @if(Request::is('your_url'))class="active"@endif>

Comments

9

You should try this:

<b class="{{ Request::is('admin/login') ? 'active' : '' }}">Login Account Details</b>

Comments

8

For named routes, I use:

@if(url()->current() == route('routeName')) class="current" @endif

Comments

8

In Blade file

@if (Request::is('companies'))
   Companies name 
@endif

Comments

7

Set this code to applied automatically for each <li> + you need to using HTMLBuilder library in your Laravel project

<script type="text/javascript">
    $(document).ready(function(){
        $('.list-group a[href="/{{Request::path()}}"]').addClass('active');
    });
</script>

Comments

7
class="nav-link {{ \Route::current()->getName() == 'panel' ? 'active' : ''}}"

Comments

6

instead of using the URL::path() to check your current path location, you may want to consider the Route::currentRouteName() so just in case you update your path, you don't need to explore all your pages to update the path name again.

Comments

4

Another way to write if and else in Laravel using path

 <p class="@if(Request::is('path/anotherPath/*')) className @else anotherClassName @endif" >
 </p>

Hope it helps

Comments

3

For Laravel 5.5 +

<a class="{{ Request::segment(1) == 'activities'  ? 'is-active' : ''}}" href="#">
                              <span class="icon">
                                <i class="fas fa-list-ol"></i>
                              </span>
                            Activities
                        </a>

Comments

2

Try this:

@if(collect(explode('/',\Illuminate\Http\Request::capture()->url()))->last() === 'yourURL')
    <li class="pull-right"><a class="intermitente"><i class="glyphicon glyphicon-alert"></i></a></li>
@endif

1 Comment

Thank you for this code snippet, which might provide some limited, immediate help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem, and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you've made.
1
@if(request()->path()=='/path/another_path/*')
@endif

1 Comment

While this code may answer the question, providing additional context regarding why and/or how this code answers the question improves its long-term value.
1

Try This:

<li class="{{ Request::is('Dashboard') ? 'active' : '' }}">
    <a href="{{ url('/Dashboard') }}">
	<i class="fa fa-dashboard"></i> <span>Dashboard</span>
    </a>
</li>

Comments

1

There are many way to achieve, one from them I use always

 Request::url()

Comments

0

Try this way :

<a href="{{ URL::to('/registration') }}">registration </a>

1 Comment

Add some explanation to your answer

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.