一、用户列表分页和模糊搜索api
1.1、创建用户控制器
运行命令创建资源控制器:php artisan make:controller Admin/UserController --api
--api 用于api的资源控制器。会忽略create 和edit 页面的方法。
 UserController.php 控制器默认就会为我们创建5个方法: 
1.2、创建transform
在app 文件夹下创建一个Transformers 文件夹,写入UserTransformer.php :
<?php
namespace App\Transformers;
use App\Models\User;
use League\Fractal\TransformerAbstract;
class UserTransformer extends TransformerAbstract {
public function transform(User $user) {
return [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
'created_at' => $user->created_at,
'updated_at' => $user->updated_at,
];
}
}
1.3、创建用户资源路由
在routes/admin.php 下创建用户资源路由:
<?php
use App\Http\Controllers\Admin\UserController;
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
$api->group(['prefix' => 'admin'], function ($api) {
$api->group(['middleware' => 'api.auth'], function ($api) {
$api->patch('users/{user}/lock', [UserController::class, 'lock']);
$api->resource('users', UserController::class, [
'only' => ['index', 'show']
]);
});
});
});
在dingo/api 中使用patch 更新某些资源。
手动创建禁用和启用用户路由users/{user}/lock ,并在UserController.php 中创建对应方法。
使用resource 会主动忽略create 和edit 这两个方法。
使用第三个参数数组,only 的话只指定使用的控制器方法。
1.4、修改用户方法(分页和模糊搜索)
UserController.php :
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\BaseController;
use App\Models\User;
use App\Transformers\UserTransformer;
use Illuminate\Http\Request;
class UserController extends BaseController
{
public function lock()
{
}
public function index(Request $request)
{
$name = $request -> input('name');
$email = $request -> input('email');
$users = User::when($name, function($query) use ($name) {
$query->where('name', 'like', "%$name%");
})
-> when($email, function ($query) use ($email) {
$query->where('email', $email);
})
-> paginate(2);
return $this->response()->paginator($users, new UserTransformer());
}
public function store(Request $request)
{
}
public function show($id)
{
}
public function update(Request $request, $id)
{
}
public function destroy($id)
{
}
}
when(keywords, callback) 有两个参数:参数1如果变量存在,则执行我们的回调函数。
在使用闭包的时候外部变量不能传入,使用use 进行传入外部变量。
paginate 表示每页几条数据,前端可以通过传递query 传参page 来表示请求第几页。 模糊搜索用like ,完全一样搜索则不加。
1.5、效果

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。
|