我正在开发一个开发工具(不幸的是,目前关闭源),该工具报告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代替对getName
,uri
或控制器名称的调用结果?>
答案 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个带有正确允许动词的响应。