Laravel 5.1 - 获取当前路由

3
我正在编写一个函数,用于自动获取每个视图的资产文件(.css、.js)。因此,对于类似于“http://mywebsite.com/displayitems”、“/home”、“/about”等页面,它可以正常工作。
但是,由于我使用了$_SERVER['REQUEST_URI']编写函数,所以当我有一个像/displayitems/1这样的路由时,就会出现问题,因为路由中包含了“/1”。
在 Laravel 4.x 时期,我有一个很好的方法来解决这个问题,但遗憾的是,在 Laravel 5.4 中无法使用同样的方法。
我一直在搜索一个好的方法来获取当前路由,但没有成功。关键是我必须忽略请求 URL 中的任何参数。
如果有人知道该怎么做,或者说我可能做错了,有完全不同、更好的方法吗?
附上我的当前函数:
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...
}
3个回答

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

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

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


嗨,非常感谢。我正在我的主布局文件中使用此函数来加载头部HTML标记中的资源。我该如何在.blade.php文件中获取当前请求(以将其作为参数传递给\App\Helper\getAllRouteAssets();)?再次感谢! - Ariel Weinberger
很抱歉再次打扰您,有这么多问题。 一旦我拥有请求对象,我想要获取请求实例的staticPrefix。 通过var_dump实例后,我意识到staticPrefix是私有的,它是"compiled"的受保护成员。 由于它是受保护的,我该如何访问它呢?我想要做的是,比如说如果我有一个路由像"website.com/displayitem/21333",这样我就可以得到"/displayitem"并使用这个值来加载特定于此页面的资源。谢谢,再次抱歉。 - Ariel Weinberger
我知道我可以编辑Route和CompiledRoute类使它们变成公共的,但这样做是正确的吗?@The Alpha - Ariel Weinberger
1
抱歉再次打扰,但有趣的事实是 - 我尝试创建一个名为“getStaticPrefix”的方法,以公开返回“staticPrefix”的私有值,但令人惊讶的是它已经存在!我很高兴自己找到了这个。总之,Route::getCompiled和CompiledRoute::getStaticPrefix已经是公共的了。非常感谢您的贡献和帮助! - Ariel Weinberger

3
我知道这有点老了,但是有一种方法可以给你整个查询路径: $request->getPathInfo(); 然而,请注意,如果您想要获取查询字符串,这将无效。 (FYI,默认情况下Laravel 5不支持查询字符串)
您可以通过以下方式单独从查询字符串中提取GET变量: $request->input('id'); 例如: http://laravel.com/api/users/?id=123使用getPathInfo()将返回/api/users,并使用$request->input('id');将返回123

1

我正在使用Laravel 5.5.20。我还需要获取路由的一部分,而不包括获取参数。路由在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(); ... ```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接