Previous route name in Laravel 5.1-5.8

前端 未结 4 1135
迷失自我
迷失自我 2020-12-10 13:22

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

相关标签:
4条回答
  • 2020-12-10 13:34

    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.

    0 讨论(0)
  • 2020-12-10 13:34

    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 讨论(0)
  • 2020-12-10 13:37

    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()
    
    0 讨论(0)
  • 2020-12-10 13:41

    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
    
    0 讨论(0)
提交回复
热议问题