使用查询字符串和自定义参数"获取"路径

Bla*_*goh 5 laravel laravel-5.5

我正在使用Laravel 5.5.13.

我的目标是创建一个这样的端点:

/api/items/{name}?kind={kind}
Run Code Online (Sandbox Code Playgroud)

kind查询字符串传入的可选参数在哪里.

我目前的路线api.php如下:

Route::get('items', 'DisplaynameController@show'); 
Run Code Online (Sandbox Code Playgroud)

我现在的控制器是这样的:

public function show(Request $request)
{
    if ($request->input('kind') {
        // TODO
    } else {
        return Item::where('name', '=', $request->input('name'))->firstOrFail();
    }
}
Run Code Online (Sandbox Code Playgroud)

一世

我目前正在使用,$request->input('name')但这意味着我需要?name=blah在查询字符串中提供.我试图让它成为路线的一部分.

请你指点一下.

Ken*_*rna 8

$name变量是一个路线PARAM,而不是查询参数,这意味着你可以直接将它传递给函数作为参数.

所以,如果你的路线是这样的:

Route::get('items/{name}', 'DisplaynameController@show'); 
Run Code Online (Sandbox Code Playgroud)

你的功能应该是这样的:

public function show($name, Request $request) // <-- note function signature
{
    if ($request->has('kind') {
        // TODO
    } else {
        return Item::where('name', '=', $name)->firstOrFail(); // <-- using variable
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是将变量作为动态属性获取,如下所示:

public function show(Request $request)
{
    if ($request->has('kind') {
        // TODO
    } else {
        return Item::where('name', '=', $request->name)->firstOrFail();
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我们将name值作为$request对象的动态属性访问,如下所示:

$request->name
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看文档的Routing> Route参数Request> Retrieving input部分.