Laravel - 如何使用子目录左侧的参数导航到 url
Laravel - How do I navigate to a url with a parameter to left of subdirectory
我必须测试这条路线,但我不确定如何导航到它。
Route::get('/{type}/Foo/{page}/{date}', 'FooController@index');
我了解到 URLs 通常在 URL.
中的参数之前定义了子目录
我曾使用 URL 像这个例子
Route::get('/Foo/{type}', 'FooController@index');
which would have an endpoint that looks like
/Foo?type=bar
有谁知道如何测试上述路线?
好吧,我认为您需要弄清楚路由参数和查询参数之间的区别。
在您的情况下,您正在尝试使用实际上看起来像这样的路由参数:
/{type}/Foo/{page}/{date}
=> /myType/Foo/15/12-11-2021
Laravel 将 {}
中的单词视为可以通过请求检索的变量,因此您可以执行以下操作:
$request->type
和 laravel 将 return 你的字符串 myType
作为输出。
在您过去尝试过的第二种情况中,您指的是查询参数,这些参数也是 $request
的一部分。将其视为 GET 请求的“正文”,但我并不是要以任何方式将您的 post 路由转换为 GET :)
第二个 url 的问题是:
/Foo/{type}
与 /Foo?type=bar
不相似
应该是这样的:/Foo/bar
一般情况下,查询参数是您希望在 GET 端点中发送可选字段的大部分时间(用于过滤、分页等),路由参数用于导致 sub-directories 的必填字段例如 /Foo/{FooId}/Bar/{BarId}
要记住的是,你必须小心你的路由,因为变量可能会与其他路由冲突。
例如一条看起来像这样的路线:
Route::get('/foo/{fooId}', [FooController::class, 'getFoo']);
Route::get('/foo/bar', [BarController::class, 'getBar']);
会发生冲突,因为 laravel 会将 bar
视为 fooId
的变量,因此您的第二条路线永远无法访问。
解决这个问题的方法是像这样正确地排序你的路线:
Route::get('/foo/bar', [BarController::class, 'getBar']);
Route::get('/foo/{fooId}', [FooController::class, 'getFoo']);
因此,当您将 bar 以外的任何其他内容作为路由参数时,您将转到第二条路由并使其按预期工作。
我必须测试这条路线,但我不确定如何导航到它。
Route::get('/{type}/Foo/{page}/{date}', 'FooController@index');
我了解到 URLs 通常在 URL.
中的参数之前定义了子目录我曾使用 URL 像这个例子
Route::get('/Foo/{type}', 'FooController@index');
which would have an endpoint that looks like
/Foo?type=bar
有谁知道如何测试上述路线?
好吧,我认为您需要弄清楚路由参数和查询参数之间的区别。
在您的情况下,您正在尝试使用实际上看起来像这样的路由参数:
/{type}/Foo/{page}/{date}
=> /myType/Foo/15/12-11-2021
Laravel 将 {}
中的单词视为可以通过请求检索的变量,因此您可以执行以下操作:
$request->type
和 laravel 将 return 你的字符串 myType
作为输出。
在您过去尝试过的第二种情况中,您指的是查询参数,这些参数也是 $request
的一部分。将其视为 GET 请求的“正文”,但我并不是要以任何方式将您的 post 路由转换为 GET :)
第二个 url 的问题是:
/Foo/{type}
与 /Foo?type=bar
应该是这样的:/Foo/bar
一般情况下,查询参数是您希望在 GET 端点中发送可选字段的大部分时间(用于过滤、分页等),路由参数用于导致 sub-directories 的必填字段例如 /Foo/{FooId}/Bar/{BarId}
要记住的是,你必须小心你的路由,因为变量可能会与其他路由冲突。
例如一条看起来像这样的路线:
Route::get('/foo/{fooId}', [FooController::class, 'getFoo']);
Route::get('/foo/bar', [BarController::class, 'getBar']);
会发生冲突,因为 laravel 会将 bar
视为 fooId
的变量,因此您的第二条路线永远无法访问。
解决这个问题的方法是像这样正确地排序你的路线:
Route::get('/foo/bar', [BarController::class, 'getBar']);
Route::get('/foo/{fooId}', [FooController::class, 'getFoo']);
因此,当您将 bar 以外的任何其他内容作为路由参数时,您将转到第二条路由并使其按预期工作。