Laravel:捕获路线中“/”之后的所有内容
Posted
技术标签:
【中文标题】Laravel:捕获路线中“/”之后的所有内容【英文标题】:Laravel: capture everything after '/' in a route 【发布时间】:2021-11-11 14:23:40 【问题描述】:我的路线如下所示:
Route::namespace('Api\HelpGuides')->prefix('help')->group(function ()
Route::get('/userInput', 'FetchArticlesController')
->where('userInput', '.*');
);
而控制器看起来像这样:
public function __invoke(Request $request, string $userInput) ...
我希望能够捕获 $userInput 所以如果我收到来自前端的请求,如下所示:
/api/help/anything/could/be/in/here?including=params
我可以在 FetchArticlesController 中使用。
当我在控制器中转储 $userInput 时,我得到了查询字符串的所有内容,因此在上面的示例中,它转储了
/anything/could/be/in/here
有没有办法让它在我定义的路线之后倾倒所有东西?例如/api/help/
之后的任何内容?理想情况下,我希望 $userInput 字符串看起来像:
/anything/could/be/in/here?including=params
【问题讨论】:
这能回答你的问题吗? Laravel - Using (:any?) wildcard for ALL routes? 【参考方案1】:如果你想捕捉任何东西:
Route::pattern('anything', '.*');
Route::namespace('Api\HelpGuides')->prefix('help')->group(function ()
Route::get('/anything', 'FetchArticlesController');
);
您的控制器方法中的 $anything
参数将是...任何东西,包括 /
。
【讨论】:
【参考方案2】:您可以使用$request->getQueryString()
获取查询字符串。
所以你可以这样做
Route::namespace('Api\HelpGuides')->prefix('help')->group(function ()
Route::get('/userInput', 'FetchArticlesController')->where('userInput', '.*');
);
public function __invoke(Request $request, string $userInput)
$userInput = trim("$userInput?$request->getQueryString()", '?');
如果最后没有查询字符串,我会修剪问号。
【讨论】:
【参考方案3】:尝试 $request->fullUrl() 或 $request->getRequestUri()
【讨论】:
以上是关于Laravel:捕获路线中“/”之后的所有内容的主要内容,如果未能解决你的问题,请参考以下文章