Laravel 5.1 - 获取当前路线

时间:2015-07-19 12:04:33

标签: php laravel laravel-5 routes assets

我正在开发一个函数来自动为每个视图获取资源(.css,.js)。所以它可以说是“http://mywebsite.com/displayitems”,/ home,/ about等。

但是自从我使用$_SERVER['REQUEST_URI']编写函数后,由于路径中的“/ 1”,我在遇到类似/displayitems/1的路径时遇到了问题。

当时在Laravel 4.x中,我有一个很好的方法可以做到这一点,但遗憾的是它在Laravel 5.4中的工作方式不同。

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

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

P.S我目前的职能:

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...
}

2 个答案:

答案 0 :(得分:7)

你可以试试这个:

// 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容器获取请求实例并调用route()以获取当前路由):

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

如果您想将当前路线作为参数传递到getAllRouteAssets方法,则必须更改typehint或传递Request并调用route方法来自getAllRouteAssets方法。

答案 1 :(得分:1)

我使用的是Laravel 5.5.20。我还需要在没有get参数的情况下获得路径的一部分。在web.php中定义的路由没有问号(?),例如:

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

在这种情况下,我没有在Route类中看到直接方法来获取没有url参数的部分。 这是我如何获得静态部分(/ board):

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