繁体   English   中英

Laravel 5.1-获取当前路线

[英]Laravel 5.1 - get current route

我正在开发一个为每个视图自动获取资产(.css,.js)的函数。 因此,对于“ http://mywebsite.com/displayitems”、/home、/about等来说,它可以正常工作。

但是,因为我使用$_SERVER['REQUEST_URI']编写了函数,所以当我使用/displayitems/1之类的路由时,由于路由中的“ / 1”,我想到了一个问题。

当时在Laravel 4.x中,我有一个很棒的方法,但是可悲的是,它在Laravel 5.4中的工作方式并不相同。

我一直在互联网上寻找一种获得当前路线的好方法,但是没有成功。 问题是我必须忽略请求URL中的任何参数。

如果有人有线索,或者我做错了,还有完全不同的更好方法吗?

PS我当前的功能:

public static function getAllRouteAssets() {
    $route = $_SERVER['REQUEST_URI'];
    if($route == "/") {
        $tag = '<link href="' . asset("assets/css/pages/home.css") . '" rel="stylesheet" type="text/css"/>';
    }
    else {
        // CSS
        $tag = '<link href="' . asset("assets/css/pages" . $route . ".css") . '" rel="stylesheet" type="text/css"/>';
    }
    echo $tag;

    //TODO: Check if file exists, homepage condition, js...
}

您可以尝试以下方法:

// Add the following (`use Illuminate\Http\Request`) statement at top your the class

public static function getAllRouteAssets(Request $request)
{
    // Get the current route
    $currentRoute = $request->route();
}

更新(从IoC / Service容器获取Request实例,并调用route()以获取当前路由):

app('request')->route(); // Current route has been retrieved

如果要将当前路由作为参数传递给getAllRouteAssets方法,则必须更改typehint或传递Request并从getAllRouteAssets方法中调用route方法。

我知道这有点老了,但是有一种方法可以为您提供整个查询路径:

$request->getPathInfo();

但是,请注意,如果您也要获取查询字符串,则此方法将无效。 (仅供参考,Laravel 5默认不支持查询字符串)

您可以通过以下方式分别从查询字符串中获取GET变量:

$request->input('id');

例:

http://laravel.com/api/users/?id=123将使用getPathInfo()返回/api/users ,使用$request->input('id');返回123 $request->input('id');

我正在使用Laravel 5.5.20。 我还需要不使用get参数来获取路由的一部分。 在web.php中定义的路由没有问号(?),例如:

 Route::get('board/{param_1}/{param_2}', 'BoardController@index');

在那种情况下,我没有在Route类中看到直接方法来获得没有url参数的零件。 这是我获得静态零件(/板)的方式:

... use Illuminate\\Support\\Facades\\Route; .. $staticPrefix = Route::getCurrentRequest()->route()->getCompiled()->getStaticPrefix(); ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM