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

时间:2017-11-12 21:36:46

标签: laravel laravel-5.5

我使用的是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。我试图让它成为路线的一部分。

请您提供指导。

2 个答案:

答案 0 :(得分:8)

$name变量是路由参数,而不是查询参数,这意味着您可以将其作为参数直接传递给函数。

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

Route::get('items/{name}', 'DisplaynameController@show'); 

你的功能应该是这样的:

public function show($name, Request $request) // <-- 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 parametersRequest > Retrieving input部分。

答案 1 :(得分:2)

documentation中所述,您应该这样做:

public function show($name, Request $request)

Laravel将负责变量绑定