前提
正常安装php8.2,包括模块 pgsql/mysqli, zip, curl, xml,用 php -v 检查版本,用 php -m 检查模块。
正常安装composer, composer -v 检查版本。
正常安装 hello-db 数据库,参考 hello-db 的内容。
正常安装 brew,并且用 brew 安装 php@8.2
步骤
- 创建hello-service项目
composer create-project laravel/laravel new hello-service
- 套件:
No starter kit
保持一个最低的依赖,因为只提供API服务 - 测试:
PHPUnit
- git:
Yes
- 数据库:
PostgreSQL
- 套件:
- 修改 composer.json
- name:
hello-service
- name:
- 设定DB
- 编辑
.env
,参考 hello-db 的内容
- 编辑
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=hellodb
DB_USERNAME=hellouser
DB_PASSWORD=123456
- 创建migration `add_username_to_users_table`,加一个 username字段 `$table->string('username')->unique();`
- 运行 `php artisan migrate`,创建所有的表
- 在 `User` model, $fillable里 加上 `username` 字段
protected $fillable = [
'name',
'username',
'email',
'password',
];
- 创建数据种子 `php artisan make:seeder UserSeeder`,这里假定只有一个用户 hello, 密码为 123456
- 在 `database/seeders/UserSeeder.php` 的 `run` 方法里加上 hello 用户
- 在 `database/seeders/DatabaseSeeder.php` 的 `run` 方法里调用 `UserSeeder`
- 运行 `php artisan db:seed`,创建用户
- 设定
laravel/sanctum
Laravel 10 安装后默认就有 Sanctum,不需要再安装。而且users表只有email,要加一个username。
- `config/auth.php`
- `guards` 新增一项 `api`
'api' => [
'driver' => 'sanctum',
'provider' => 'users',
],
-
创建 api 文档
doc/api.yml
-
创建
AuthController
- 修改
app/Http/Controllers/Controller.php
,加上通用的返回格式 - 运行
php artisan make:controller AuthController
,并加上 login/logout 方法
- 修改
-
创建
UserController
- 运行
php artisan make:controller UserController
,并加上 index/show/store/update/destroy 方法 - 运行
php artisan make:request UserRequest
,并加上 rules 方法 - 运行
php artisan make:resource UserResource
,并加上 toArray 方法
- 运行
-
设定
routes/api.php
,加上login
和logout
的路由
Route::post('/login', [AuthController::class, 'login']);
Route::middleware('auth:sanctum')->post('/logout', [AuthController::class, 'logout']);
-
检查路由
- 运行
php artisan route:list
,可以看到login
和logout
的路由 - 运行
php artisan serve
,可以用 postman 测试login
和logout
的路由- 或者用 valet 启用
valet park
- 或者用 valet 启用
- 运行
-
访问 API
- 客户端应在发出请求时在 HTTP 请求的 Authorization 头中附带 token。格式通常为
Bearer <token>
。 - 参考 hello-ui
- 客户端应在发出请求时在 HTTP 请求的 Authorization 头中附带 token。格式通常为
-
所有内容可以在
https://gitlab.com/hello-public/hello-service
获得
参考
hello-service: https://blog.youkuaiyun.com/weixin_66886617/article/details/135425612
hello-db: https://blog.youkuaiyun.com/weixin_66886617/article/details/135411591
hello-ui: https://blog.youkuaiyun.com/weixin_66886617/article/details/135429060