1 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
需要明確的是,這不是一個(gè)錯(cuò)誤。錯(cuò)誤意味著這是框架開發(fā)人員明確表示不應(yīng)該發(fā)生但實(shí)際上發(fā)生的事情。這主要是一種未定義的行為。
發(fā)生這種情況的原因是請(qǐng)求如何確定當(dāng)前路徑:
在Request::path()
public function path()
{
? ? $pattern = trim($this->getPathInfo(), '/');
? ? return $pattern == '' ? '/' : $pattern;
}
這將從/
當(dāng)前路徑信息中修剪以獲取路徑。這并不是一件不合理的事情,因?yàn)槟ǔ2恍枰皩?dǎo)和尾隨斜杠,但這會(huì)導(dǎo)致具有許多前導(dǎo)和尾隨斜杠的路徑也可以像 https://laravel.com////docs 一樣工作/5.5/errors/////#http-exceptions
發(fā)生這種情況的原因是因?yàn)榉祷氐臉?biāo)準(zhǔn)路由驗(yàn)證器Route::getValidators()
(特別是使用的 UriValidator?$request->path()
)
如果你真的必須堅(jiān)持“修復(fù)”這個(gè)問題,那么你可以添加一個(gè)自定義驗(yàn)證器來檢查這個(gè)確切的事情:
class MyUriValidator implements ValidatorInterface? {
? ? public function matches(Route $route, Request $request)
? ? {
? ? ? ? $path = $request->getPathInfo();
? ? ? ? return preg_match($route->getCompiled()->getRegex(), rawurldecode($path));
? ? }
}
然后您可以在您的中注冊(cè)這個(gè)額外的驗(yàn)證器AppServiceProvider:
public function boot() {
? ? Route::$validators = array_merge(Route::getValidators(), [ new MyUriValidator ]);
}
- 1 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)