"Get" 带有查询字符串和自定义参数的路由
"Get" route with query string and custom params
我正在使用 Laravel 5.5.13。
我的目标是创建这样的端点:
/api/items/{name}?kind={kind}
其中kind
为查询字符串传入的可选参数
我在 api.php
中的当前路线如下所示:
Route::get('items', 'DisplaynameController@show');
我现在的控制器是这样的:
public function show(Request $request)
{
if ($request->input('kind') {
// TODO
} else {
return Item::where('name', '=', $request->input('name'))->firstOrFail();
}
}
我
我目前正在使用 $request->input('name')
,但这意味着我需要在查询字符串中提供 ?name=blah
。我正在努力让它成为路线的一部分。
请指点一下。
$name
变量是路由参数,不是查询参数,这意味着您可以将它作为参数直接传递给函数。
所以,如果你的路线是这样的:
Route::get('items/{name}', 'DisplaynameController@show');
你的函数应该是这样的:
public function show(Request $request, $name) // <-- note function signature
{ // ^^^^^
if ($request->has('kind'))
{
// TODO
}
else
{
return Item::where('name', '=', $name)->firstOrFail(); // <-- using variable
} // ^^^^^
}
另一种选择是将变量作为 Dynamic Property 获取,如下所示:
public function show(Request $request)
{
if ($request->has('kind'))
{
// TODO
}
else
{
return Item::where('name', '=', $request->name)->firstOrFail();
} // ^^^^^^^^^^^^^^
}
请注意,我们将 name
值作为 $request
对象的动态 属性 进行访问,如下所示:
$request->name
有关详细信息,请查看文档的 Routing > Route parameters and Request > Retrieving input 部分。
如 documentation 中所述,您应该这样做:
public function show($name, Request $request)
Laravel 将负责变量绑定
我正在使用 Laravel 5.5.13。
我的目标是创建这样的端点:
/api/items/{name}?kind={kind}
其中kind
为查询字符串传入的可选参数
我在 api.php
中的当前路线如下所示:
Route::get('items', 'DisplaynameController@show');
我现在的控制器是这样的:
public function show(Request $request)
{
if ($request->input('kind') {
// TODO
} else {
return Item::where('name', '=', $request->input('name'))->firstOrFail();
}
}
我
我目前正在使用 $request->input('name')
,但这意味着我需要在查询字符串中提供 ?name=blah
。我正在努力让它成为路线的一部分。
请指点一下。
$name
变量是路由参数,不是查询参数,这意味着您可以将它作为参数直接传递给函数。
所以,如果你的路线是这样的:
Route::get('items/{name}', 'DisplaynameController@show');
你的函数应该是这样的:
public function show(Request $request, $name) // <-- note function signature
{ // ^^^^^
if ($request->has('kind'))
{
// TODO
}
else
{
return Item::where('name', '=', $name)->firstOrFail(); // <-- using variable
} // ^^^^^
}
另一种选择是将变量作为 Dynamic Property 获取,如下所示:
public function show(Request $request)
{
if ($request->has('kind'))
{
// TODO
}
else
{
return Item::where('name', '=', $request->name)->firstOrFail();
} // ^^^^^^^^^^^^^^
}
请注意,我们将 name
值作为 $request
对象的动态 属性 进行访问,如下所示:
$request->name
有关详细信息,请查看文档的 Routing > Route parameters and Request > Retrieving input 部分。
如 documentation 中所述,您应该这样做:
public function show($name, Request $request)
Laravel 将负责变量绑定