25

I try to find name of previous route in Laravel 5.1. With:

{!! URL::previous() !!}

I get the route url, but I try to get route name like I get for current page:

{!! Route::current()->getName() !!}

My client wont a different text for Thank you page, depends on from page (Register page or Contact page) user go to Thank you page. I try with:

{!! Route::previous()->getName() !!}

But that didn't work. I try to get something like:

@if(previous-route == 'contact')
  some text
@else
  other text
@endif
Akul Von Itram
  • 1,428
  • 2
  • 20
  • 31

5 Answers5

47

Here what work for me. I find this answer and this question and modify it to work in my case: https://stackoverflow.com/a/36476224/2807381

@if(app('router')->getRoutes()->match(app('request')->create(URL::previous()))->getName() == 'public.contact')
    Some text
@endif

Update for 5.8 version by Robert

app('router')->getRoutes()->match(app('request')->create(url()->previous()))->getName()
Akul Von Itram
  • 1,428
  • 2
  • 20
  • 31
  • If also implementing Route::fallback, Laravel will always return this as the matched route. Anyone has a workaround for this? – Bert H Aug 16 '18 at 13:22
  • 3
    `app('router')->getRoutes()->match(app('request')->create(url()->previous()))->getName()` This is the working example in 5.8 – Robert May 21 '19 at 15:29
14

Simply you can do this to achieve it. I hope it helps

In Controller:

$url = url()->previous();
$route = app('router')->getRoutes($url)->match(app('request')->create($url))->getName();

if($route == 'RouteName') {
    //Do required things
 }

In blade file

@php
 $url = url()->previous();
 $route = app('router')->getRoutes($url)->match(app('request')->create($url))->getName();
@endphp

@if($route == 'RouteName')
   //Do one task
@else
  // Do another task
@endif
Biswa
  • 479
  • 7
  • 11
9

You can't get route name of previous page, so your options are:

  1. Check previous URL instead of a route name.

  2. Use sessions. First, save route name:

    session()->flash('previous-route', Route::current()->getName());
    

Then check if session has previous-route:

@if (session()->has(`previous-route`) && session(`previous-route`) == 'contacts')
    Display something
@endif
  1. Use GET parameters to pass route name.

If I were you, I'd use sessions or would check previous URL.

Alexey Mezenin
  • 158,981
  • 26
  • 290
  • 279
4

I've created a helper function like this.

/**
 * Return whether previous route name is equal to a given route name.
 *
 * @param string $routeName
 * @return boolean
 */
function is_previous_route(string $routeName) : bool
{
    $previousRequest = app('request')->create(URL::previous());

    try {
        $previousRouteName = app('router')->getRoutes()->match($previousRequest)->getName();
    } catch (\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $exception) {
        // Exception is thrown if no mathing route found.
        // This will happen for example when comming from outside of this app.
        return false;
    }

    return $previousRouteName === $routeName;
}
0

Route::getRoutes()->match(request()->create(url()->previousPath()))->getName();