我想使用数据库中的一些字段来过滤json响应, 例如 apiv1user?username=mary, 但是不知道怎么做. 我的第二个问题是,路由apiv1user3可以使用,但我不记得我是如何设置的,因为我是在一段时间前设置的。谁能帮帮我?
api.php
Route::group(['prefix' => 'v1'], function () {
Route::apiResource('/user', 'UserController');
});
用户资源
public function toArray($request)
{
return parent::toArray($request);
}
用户控制器
public function show(User $user): UserResource
{
return new UserResource ($user);
}
public function index(): UserResourceCollection
{
return new UserResourceCollection(User::orderBy('created_at', 'desc')
->paginate(5)
);
}
public function store(Request $Request)
{
$request->validate([
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required',
]);
$user = User::create($request->all());
\Mail::to($user)->send(new Welcome);
return new UserResourse($user);
}
public function update(User $user, Request $request): UserResource
{
$user->update($request->all());
return new UserResource($User);
}
public function destroy(User $user)
{
$user->delete();
return response()->json();
}
}
已更新
我看到了好几个教程,有网友给出了下面的建议,但是我不知道怎么拼,因为我上面已经有了一个显示方法。 我试着把这个显示方法注释掉,然后为查询字符串创建另一个显示方法。
public function show(User $user): UserResourceCollection
{
$request->input('username');
return new UserResourceCollection(User::orderBy('created_at', 'desc')
->where('username', '=', $username)
->paginate(2)
);
}
并增加了一个GET途径
Route::group(['prefix' => 'v1'], function () {
Route::apiResource('/user', 'UserController');
Route::get('/user/{username?}','UserController@show');
});
这是作为一个端点工作。分页部分是工作的,我把它做得更小,所以我知道它在调用方法,但它是按id搜索的,而我想按用户名搜索。理想情况下,我想使用一个查询参数,比如apiv1user?username=mary。
为了得到json请求,你可以调用 $request->input('name')
比如说,你可以在controller上设置资源操作。
你可以在控制器上设置资源操作。例如,你可以在控制器上创建 UserController.show
的方法。所以, GET /user/{id}
方法将由 UserController.show
更多的例子,你看 文件.
我觉得不可能创建api的url参数。 我又开始使用这个教程
https:/www.youtube.comwatch?v=z3YPhYwcbBM.
这种方式意味着我总是要知道id(通过产品id搜索,而不是通过查询搜索过滤评论),这并不理想。
例如 http:/localhost:8000apiv1products2reviews。
然而我可以添加更多的端点来代替评论,比如分类等。