Kamran Allana
Kamran Allana

Reputation: 956

How to get route name from url (not current url) in Laravel?

Working on dynamic routing for all frontend urls but while accessing admin routes it goes to abort condition which is on the mentioned route's function.

Web.php

Route::get('/{slug?}', 'slug' )->where('slug','(.*)')->name('slug');

FrontController.php

 public function slug(Request $request, $slug=null) {
    if ($slug == "admin") {
        return redirect()->route('login');
    }
    
    
        if (Str::contains($slug, 'admin/')) {
        $routes = Route::getRoutes();
        $request = Request::create($slug);
        try {
            $route->match($request,'admin.dashboard');
            //How to access requested url's route name to redirect there

        } catch (\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e) {
            abort(404);
        }
    }

    if ($slug == "login") {
        return view('auth.login');
    }

    if ($slug == null) {
        $page = Pages::where('url', '')->first();
    }

    if (empty($page)) {
        abort(404);
    }

    $contentWithBlade = Blade::render($page->pages_content);
    $session = $request->session()->put('key', $page);

    return view('frontend.pages.template', compact('contentWithBlade', 'page'));
}

Any suggestions how to get route name against route url?

Upvotes: 1

Views: 1663

Answers (1)

WaeL M.El-Saied
WaeL M.El-Saied

Reputation: 185

check this

Route::getCurrentRoute()->getPath();

or

\Request::route()->getName()

from v5.1

use Illuminate\Support\Facades\Route;
$currentPath= Route::getFacadeRoot()->current()->uri();

Laravel v5.2

Route::currentRouteName(); //use Illuminate\Support\Facades\Route;

Or if you need the action name

Route::getCurrentRoute()->getActionName();

Laravel 5.2 route documentation

Retrieving The Request URI

The path method returns the request's URI. So, if the incoming request is targeted at http://example.com/foo/bar, the path method will return foo/bar:

$uri = $request->path();

The is method allows you to verify that the incoming request URI matches a given pattern. You may use the * character as a wildcard when utilizing this method:

if ($request->is('admin/*')) {
    //
}

To get the full URL, not just the path info, you may use the url method on the request instance:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Laravel 5.3 route documentation

Laravel v6.x...7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** Current as of Nov 11th 2019 - version 6.5 **

Laravel 6.x route documentation

There is an option to use request to get route

$request->route()->getName();

Latest Version of laravel

Upvotes: 2

Related Questions