后端PHP全栈框架laravel 9/10 API 详细讲解笔记,大部分文档都有的,请仔细阅读本文章和文档

 

 

 

项目地址:https://github.com/piotr-jura-udemy/laravel-course-2023/tree/master/event-management 

要搭建好php环境和composer环境。默认你有点基础,这个项目用的编译器是phpstorm

 

 

 

 




// 详细版本 laravel 10 / 9 (默认你已将会配置composer和搭建php环境,对laravel框架有大概的了解)
1. 建立一个api项目

composer create-project --prefer-dist laravel/laravel event-management

 创建模型和关系,模型的迁移,配置路由

1.1

连接数据库,自己配置

 配置好后进行数据迁移,php artisan migrate

 创建模型

 

 创建控制器

 建立表的数据结构--开始数据迁移

注意,如果报错这样使用

\App\Models\User:class

 在app目录下的Model下编辑model

 添加路由

 

 注意use的是否引入,引入了才可以省略写

 查看路由

 这个RouteServiceProvider文件是设置了Laravel的应用程序,他告诉Laravel如何做什么,初始化和配置路由,速率限制器等。api和web路由

 内核php文件,定义了一些适用所有请求的的通用中间件,可以配置的,web的使用csrf令牌,api使用token



2.Seeding Data for the REST API (生成假数据,非必须)

负责设置的特定模型转到factory和seeder,

 事件模式,执行之后生成

 执行这个,生成

 然后我们再回到EventFactory.php

  public function definition(): array
    {
        return [
            'name' => fake()->unique()->sentence(3),
            'description' => fake()->text,
            'start_time' => fake()->dateTimeBetween('now', '+1 month'),
            'end_time' => fake()->dateTimeBetween('+1 month', '+2 months'),
        ];
    }

 

 EventSeeder.php

 AttendeeSeeder.php

 DatabaseSeeder.php

 最后,重置数据库,迁移刷新

 

注意那些引用的报错那些,如果报错这样使用

\App\Models\User:class

 

 

3.PostMan REST Client  (重要,开始api了)

我们直接把服务跑起来php artisan serve

 在控制器中返回

 

如果返回的是user,那么这个密码会隐藏,他是受保护的

 Event的详情页

我把这个前缀换成全局的了

 

 

 

4. Storing Data and Validation (提交数据到数据库)

 

5. Updating and Deleting Data (更新和删除)

更新

 

删除

 

 

 

 

 

 

6. API Resources Controlling JSON Response (API 资源)

可以用来加载单个关系甚至一组资源

 显式调用,在他的控制器中

 返回状态

只返回3条

 加多一个

 控制器

 返回的嵌套user在里面

 加多一个

AttendeeResource

 

7.Attendees and Pagination

 

AttendeeController控制器,查看

 添加

 根据id显示详情

 我们去找1681

 api要换成这样

 删除

 更新,这样路由是不需要更新

 

8. Optional Relation Loading

 

解析这些请求的查询参数,这个请求参数称为,包含并将并将其转为值数组。

 

 

 

9. Auth身份验证  (生成token和存)

 默认下载就安装了sanctum

 然后php artisan migrate

这个代表他具有API令牌的特征

 新建立一个Auth控制器,进行身份验证和注销

,ji

 然后在这个AuthControll页面

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;

class AuthController extends Controller
{
    public function login(Request $request)
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required'
        ]);

        $user = \App\Models\User::where('email', $request->email)->first();

        if (!$user) {
            throw ValidationException::withMessages([
                'email' => ['The provided credentials are incorrect.']
            ]);
        }

        if (!Hash::check($request->password, $user->password)) {
            throw ValidationException::withMessages([
                'email' => ['The provided credentials are incorrect.']
            ]);
        }

        $token = $user->createToken('api-token')->plainTextToken;

        return response()->json([
            'token' => $token
        ]);
    }

    public function logout(Request $request)
    {
        $request->user()->tokens()->delete();

        return response()->json([
            'message' => 'Logged out successfully'
        ]);
    }
}

 找到你的生成的数据库user,随便找一个email,密码都是password

 成功了

 然后令牌被存到这里来了

 

 

 

10. Protecting Routes

中间件是保护的,需要对应的身份验证

 直接请求是没登录授权的,需要带上token

 让我们带上token,试试

 

 

试试修改EventControll的,目前令牌是永久保存的

 如果部分api需要验证

 

 

11.Revoking Tokens and Signing Out(移除token)

 

 到期时间

 预设定时清理过期的token

 

 

11.Authorization with Gates (授权)

讨论 laravel的gates

 

posted @ 2024-03-26 01:49  漫漫长路</>  阅读(52)  评论(0编辑  收藏  举报