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:捕获路线中“/”之后的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc 捕获所有路线,但只捕获未知路线

Laravel 5:404 路线上的会话

laravel 包中路由声明的顺序

Laravel 子路由中的 Vue Router 找不到正确的组件

Laravel 5:如何获取所有路线的路径?

获取所有路线,Laravel 4