1 回答
TA贡献1871条经验 获得超13个赞
需要明确的是,这不是一个错误。错误意味着这是框架开发人员明确表示不应该发生但实际上发生的事情。这主要是一种未定义的行为。
发生这种情况的原因是请求如何确定当前路径:
在Request::path()
public function path()
{
$pattern = trim($this->getPathInfo(), '/');
return $pattern == '' ? '/' : $pattern;
}
这将从/
当前路径信息中修剪以获取路径。这并不是一件不合理的事情,因为您通常不需要前导和尾随斜杠,但这会导致具有许多前导和尾随斜杠的路径也可以像 https://laravel.com////docs 一样工作/5.5/errors/////#http-exceptions
发生这种情况的原因是因为返回的标准路由验证器Route::getValidators()
(特别是使用的 UriValidator $request->path()
)
如果你真的必须坚持“修复”这个问题,那么你可以添加一个自定义验证器来检查这个确切的事情:
class MyUriValidator implements ValidatorInterface {
public function matches(Route $route, Request $request)
{
$path = $request->getPathInfo();
return preg_match($route->getCompiled()->getRegex(), rawurldecode($path));
}
}
然后您可以在您的中注册这个额外的验证器AppServiceProvider:
public function boot() {
Route::$validators = array_merge(Route::getValidators(), [ new MyUriValidator ]);
}
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报