【问题标题】:Laravel 5.1 - get current routeLaravel 5.1 - 获取当前路线
【发布时间】:2015-10-08 15:50:47
【问题描述】:

我正在开发一个为每个视图自动获取资产(.css、.js)的功能。所以它适用于“http://mywebsite.com/displayitems”、/home、/about 等。

但由于我使用$_SERVER['REQUEST_URI'] 编写函数,当我有类似/displayitems/1 的路由时遇到了一个问题,因为路由中的“/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...
}

【问题讨论】:

    标签: php laravel laravel-5 routes assets


    【解决方案1】:

    你可以试试这个:

    // 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 方法。

    【讨论】:

    • 嘿。非常感谢。我在我的主布局文件中使用这个函数来加载标题 HTML 标记中的资产。如何在该 .blade.php 文件中获取当前请求(作为参数传递给\App\Helper\getAllRouteAssets();?再次感谢!
    • 很抱歉再次用这么多问题打扰您。获得请求对象后,我想获取请求实例的 staticPrefix。通过 var_dumping 实例,我意识到 staticPrefix 是私有的,它是受保护的“已编译”的成员。我怎样才能访问它,因为它受到保护?我想做的是,假设我有一个像“website.com/displayitem/21333”这样的路由,这样我就可以获得“/displayitem”并使用这个值来加载特定于这个页面的资产。再次感谢和抱歉。
    • PS 我知道我可以编辑 Route 和 CompiledRoute 类以将它们公开,但这样做是正确的吗? @阿尔法
    • 再次抱歉,但有趣的事实 - 我尝试创建一个方法为“getStaticPrefix”,以公开返回“staticPrefix”的私有值,但令人惊讶的是它已经存在!我很高兴独自找到这个。/所以总结一下,Route::getCompiled 和 CompiledRoute::getStaticPrefix 已经公开。非常感谢您的贡献和帮助!
    【解决方案2】:

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

    $request-&gt;getPathInfo();

    但是,请注意,如果您还想获取查询字符串,这将不起作用。 (仅供参考,Laravel 5 默认不支持查询字符串)

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

    $request-&gt;input('id');

    例子:

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

    【讨论】:

      【解决方案3】:

      我正在使用 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(); ...

      【讨论】:

        猜你喜欢
        • 2015-12-04
        • 2016-08-03
        • 2015-12-24
        • 1970-01-01
        • 2014-02-25
        • 2014-09-10
        • 1970-01-01
        • 2015-07-14
        • 2016-05-08
        相关资源
        最近更新 更多