Laravel-路由名称已替换为完整URI?

时间:2019-02-02 00:31:11

标签: php laravel routing

我正在开发一个开发工具(不幸的是,目前关闭源),该工具报告Laravel路线名称。这样做是通过主要这样的代码来实现的(简化后的代码使问这个问题变得容易)。

function identifyRoute() {
    $router = app('router');
    $route  = $router->current();

    $name   = $route->name;
    if($name) {
        return $name;
    }

    $action = $route->getAction();
    if(isset($action["controller"]) && $action["controller"]) {
        return $action["controller"];
    }

    if($name = $route->uri())
    {
        return $name;
    }

    return 'Could Not Identify Name';
}

所以,对于这样的路线

Route::get('foo/{id}/bar', function($id ) {
    //...      
});

我们的函数返回字符串foo/{id}/bar。或者,它通常 返回字符串foo/{id}/bar。我们收到用户的报告,有时这种识别路线的方法会返回类似

的结果
foo/1234/bar
foo/1235/bar
foo/1236/bar
foo/1237/bar             

也就是说,它正在返回请求的整个URI。

是否有一些Laravel设置(或流行的扩展程序/插件)可以用请求的完整URI代替对getNameuri或控制器名称的调用结果?

1 个答案:

答案 0 :(得分:2)

有点猜测,但是一个import cats.implicits._ import cats.effect.IO import fs2._ case class Element(time: Long, part: Symbol, value: Int) val elements = Stream( Element(0, 'a, 3), Element(1, 'a, 4), Element(2, 'b, 10), Element(3, 'b, 20), Element(3, 'a, 5) ) val runningSumsByPart = elements .scan(Map.empty[Symbol, Int] -> none[Element]) { case ((sums, _), el@Element(_, part, value)) => val sum = sums.getOrElse(part, 0) + value (sums + (part -> sum), el.copy(value = sum).some) } .collect { case (_, Some(el)) => el } runningSumsByPart.covary[IO].evalTap(el => IO { println(el) }).compile.drain.unsafeRunSync() HTTP请求将使用请求的路径而不是模式来返回200个带有正确允许动词的响应。

Current source code in 5.7

Method is almost the same in 5.4.9