Laravel CRUD API 實作

news/2024/3/28 17:13:00/文章来源:https://blog.csdn.net/tp27933/article/details/130330294

前言

因緣際會下還是開始學習php了。經歷了風風雨雨終於在今年暑假要去加拿大留學了,php會是第二年的其中一門必修課程,加上最近前端也真的蠻心累,也許有一門精進的後端語言,日後轉職會有更寬廣的道路,對自己說加油!


一、註冊 API

 首先創建auth 的controlller

php artisan make:controller API/AuthController

在laravel 中 使用Eloquent ORM 來控制資料庫

代碼如下:

<?phpnamespace App\Http\Controllers\API;use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;class AuthController extends BaseController
{public function register(Request $requst){$user = User::create(['username' => $requst->input('username'),'email' => $requst->input('email'),'password' => Hash::make($requst->input('password')),]);$token = $user->createToken('user_token')->return $this->response(['user' => $user,'token' => $token]);}}}

現在來一步步拆解上方的代碼

  • 首先引入model User (laravel 預設Models 資料夾下有User.php) 
    使用該model的方法創建一個新的資料  User::create 接受一個數組參數,裏面則是要添加的key跟value  'key' => value 
  • $request-> input 這個方法則可以獲取前端傳送的參數
  • Hash::make() 則是表示雜湊(Hash)過後的字串。
     

這裡對於剛入門後端的新手來說會有一個問題是儲存密碼為什麼不能直接儲存,而存包裹後的密碼呢?這是因為由於用戶可能會在不同的網站內使用同一組密碼,所以我們要避免密碼存在資料庫時,如果不小心外流的話,會造成嚴重的安全問題。所以一般來說,存在資料庫內的內容,會是雜湊(Hash)過後的字串。

  • 最後創建token 並且調用plainTextToken
    使用 plainTextToken 可以調用未 hash 前的 token。
  • 最後返回token以及註冊成功的用戶訊息

2.添加驗證

首先創建 request 檔案,指令如下

 php artisan make:request Auth/RegisteRequest

在rules的方法中返回相對的驗證規則,代碼如下: 

<?phpnamespace App\Http\Requests\Auth;use Illuminate\Foundation\Http\FormRequest;class RegisteRequest extends FormRequest
{/*** Get the validation rules that apply to the request.** @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>*/public function rules(){return ['username' => 'required|string|max:255','email' => 'required|string|email|max:255|unique:users','password' => 'required|string|min:4'];}
}

回到controller , 只要將原本的Request換成剛剛的RegisteRequest即可,完整代碼如下

<?phpnamespace App\Http\Controllers\API;use App\Http\Controllers\BaseController;
use App\Http\Requests\Auth\RegisteRequest;use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Hash;class AuthController extends BaseController
{public function register(RegisteRequest $requst){try {$user = User::create(['username' => $requst->input('username'),'email' => $requst->input('email'),'password' => Hash::make($requst->input('password')),]);$token = $user->createToken('user_token') -> plainTextToken;return $this->response(['user' => $user,'token' => $token]);} catch (\Exception $e) {return $this->response([null,], $e->getMessage(), 400);};}
}

二、登入 API

待更新....


補充:

Eloquent ORM的基本使用方法

notice: PK. = primary key

// 拿User這個model舉例// 查詢PK = 1的資料
User::find(1);// 查詢多筆資料 By PK欄位
User::find([1, 2, 3]);// Where條件式,第一個參數為欄位名稱,第二個參數為值
User::where('name', 'Yee');// Where也可以這樣用
User::where('age', '>', '18');// Where還能這樣用 ((我最愛這方法XD
$query = [['name', '=', 'Yee'], ['age', '>', '18']]
User::where($query);// 當然也有where NULL
User::whereNull('name')->get();
User::whereNotNull('name')->get();// Insert 的方法一
$user = new User;
$user->name = 'Yee';
...
$user->save();// Insert 的方法二
$attributes = [['name'=>'Yee', 'email'=>'yee@gmail.com']];
$user = User::create($attributes);// 兩個新增的方法都會讓 $user 擁有剛剛新增得值// Update 的方法一
$user = User::find(1);
$user->name = 'Yee2';
$user->save();// Update 的方法二
// where條件請參考上面的方法
$user = User::where($query)->update($attributes);// Delete 的方法,
User::find(1)->delete();

更進階的用法 

// 有資料回傳資料否則拋出Exception
User::find(1)->firstOrFail()// 有資料回傳資料,否則使用另一個條件式查詢
User::where('name', 'Yee')->firstOr(['name', 'Yee2'])// 有資料就回傳,否則新增一筆資料,方法一
$user = User::firstOrNew(['email' =>  'yee@gmail.com'],['name' => 'yee']
);$user->save();// 有資料就回傳,否則新增一筆資料,方法二
// 這方法不需要 $user->save();
$user = User::firstOrCreate(['email' =>  'yee@gmail.com'],['name' => 'Yee']
);// 有資料就更新,否則新增一筆資料
$user = User::updateOrCreate(['email' =>  'yee@gmail.com'],['name' => 'Yee']
);更 

以上的條件式的結尾可以用

// 取第一筆 User::find(1)->first(); // 取全部 User::where('age', '>', '18')->get(); 

$request的常用方法

方法描述
input('key','default-value')
此方法可以獲取get請求所帶來的特定參數的值,如果沒有該參數則返回默認值
all()
此方法獲取get請求的所有參數,然後會返回一個數組,一個鍵值對數組
path()
對於http://localhost/test?b=37521請求,會返回'test'僅僅是個‘路徑’
url()
對於http://localhost/test?b=37521請求,會返回'http://localhost/test',也就是說,url不帶參數
fullUrl()
請求完整url,比如請求的路徑是 localhost:8000/test?id=10則返回"http://localhost:8000/test?id=1"
isMethod('GET')
判斷請求的方式,返回值為布爾值
getMethod()
獲取請求方式,返回為字符串
is($pattern, $path)判斷當前參數是否符合pattern
cookie('key','default-value')
從請求實例中拿取某個cookie,如果沒有則會返回默認的值
hasFile('file')
參數'file'是上傳文件時候的name='file',通過此方法判斷上傳文件時候是否真的選擇了待上傳的文件
file('file')
通過此方法獲取上傳的文件,對該函數的返回值進行判斷無誤後應該處理如何保存文件到對應的位置
header(‘Connection’)獲取請求頭Connection
except([‘username’,’password’]) /except( 'username' , 'password'])剔除不必要的屬性(username,password)
only([‘username’,’password’]) /only( 'username' , 'password'])提取指定屬性(username,password)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102722.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么你永远不应该在CSS中使用px来设置字体大小

代码部署后可能存在的BUG没法实时知道&#xff0c;事后为了解决这些BUG&#xff0c;花了大量的时间进行log 调试&#xff0c;这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。 在Josh Collinsworth的博客文章“永远不要用px作为字体大小”中&#xff0c;作者讨论了为什么不…

Ceph入门到精通-Ceph 编排器简介

第 1 章 Ceph 编排器简介 作为存储管理员&#xff0c;您可以将 Ceph 编排器与 Cephadm 实用程序搭配使用&#xff0c;能够发现设备并在 Red Hat Ceph Storage 集群中创建服务。 1.1. 使用 Ceph Orchestrator Red Hat Ceph Storage Orchestrators 是经理模块&#xff0c;主要…

C语言函数大全-- o 开头的函数

C语言函数大全 本篇介绍C语言函数大全-- o 开头的函数 1. obstack_init&#xff0c;obstack_free&#xff0c;obstack_alloc&#xff0c;obstack_blank&#xff0c;obstack_grow 1.1 函数说明 函数声明函数功能void obstack_init(struct obstack *obstack_ptr);它是 POSIX …

TypeScript自学笔记

目录 1.什么是Ts? 1.1 设计公司&#xff1a;微软 1.2 TS概述 1.3 TS是静态类型 JS是动态类型 1.4 TS是强类型语言 JS是弱类型语言 2.TypeScript编译器 2.1 安装 2.2 TS自动编译和编译选项设置 3.TS的数据类型 3.1 基础数据类型number、string、boolean 3.2 Arrays&a…

美颜sdk开发实践:如何构建美颜sdk功能?

美颜功能是现今很多应用中必不可少的一项功能。而要实现美颜功能&#xff0c;除了自己编写美颜算法外&#xff0c;还可以使用美颜sdk来实现。本文将介绍如何从零开始构建美颜功能&#xff0c;利用美颜sdk实现美颜效果。 一、简介 美颜sdk可以向用户提供多种美颜效果&#xff…

大学生用什么蓝牙耳机好?2023好用的蓝牙耳机推荐

近几年&#xff0c;蓝牙耳机市场不断扩大&#xff0c;逐渐取代有线耳机成为最受人欢迎的数码产品之一。作为蓝牙耳机主要受众群的大学生&#xff0c;用什么蓝牙耳机比较好呢&#xff1f;下面&#xff0c;我来给大家推荐几款便宜好用的蓝牙耳机&#xff0c;一起来看看吧。 一、…

stm32读写内部Flash

stm32内部flash地址架构映射 因为我的stm32f407的内部flash是1M的所以块2不存在&#xff0c;但他的地址仍然存在&#xff0c;只是没有作用&#xff0c;这是stm32的整体框架。 主存储器 一般我们说 STM32 内部 FLASH 的时候&#xff0c;都是指这个主存储器区域&#xff0c;它…

生成树协议三姐妹:STP、RSTP 和 MSTP,附思科和华为双厂商命令示例

在计算机网络中&#xff0c;为了保证网络拓扑结构的稳定性和可靠性&#xff0c;需要采用一些协议进行网络的管理和控制。其中&#xff0c;STP、RSTP 和 MSTP 是三种常用的网络管理协议。本文将分别介绍这三种协议&#xff0c;并且使用华为、思科两家厂商作为案例给出相应的命令…

数据库之约束、索引和事务

一、约束 约束,顾名思义就是数据库对数据库中的数据所给出的一组检验规则.负责判断元素是否符合数据库要求.其目的就是为了提高效率以及准确性. 1.not null - > 数据元素非空 表示如果插入数据,则当前数据不能为空. //创建一张学生表,其班级id和年级id不为空 create …

【嵌入式笔/面试】嵌入式软件基础题和真题总结——网络相关

在学习的时候找到几个十分好的工程和个人博客&#xff0c;先码一下&#xff0c;内容都摘自其中&#xff0c;有些重难点做了补充&#xff01; 才鲸 / 嵌入式软件笔试题汇总 嵌入式与Linux那些事 阿秀的学习笔记 小林coding 百问网linux 嵌入式软件面试合集 2022年春招实习十四面…

unity3d---物体加点击事件

目录 1.给需要点击点物体加collider 2.层级面板加EventSystem 3. 相机加Physics Raycaster 4.物体单独响应点击事件 5.控制脚本实现各物体的点击事件 6.点击ui时屏蔽 物体点击事件 1.给需要点击点物体加collider 2.层级面板加EventSystem 3. 相机加Physics Raycaster 2d…

6. 树的入门

6. 树的入门 之前我们实现的符号表中&#xff0c;不难看出&#xff0c;符号表的增删查操作&#xff0c;随着元素个数N的增多&#xff0c;其耗时也是线性增多的&#xff0c;时间复杂度都是O(n),为了提高运算效率&#xff0c;接下来我们学习树这种数据结构。 6.1 树的基本定义 …

PerformanceTest, monitoring command

PerformanceTest, monitoring command 1、数据库 #查看最大连接数 show variables like max_connections; #例如:查看mysql连接数 show status like Threads%; 说明: threads_cached //查看线程缓存内的线程的数量 threads_connected //查看当前打开的连接的数量(打开的…

Pytorch的几种常用优化器

文章目录 AdagradSGDRMSpropAdamAdamW Adagrad Adagrad是一种可以自动调节每个参数更新的梯度的优化器&#xff0c;也可以做到在梯度平缓时走的步长大&#xff0c;在梯度小时走的步长小&#xff0c;从而防止loss出现剧烈震荡的情况。这里默认你已知道了他的原理了&#xff0c;…

离散数学-考纲版-01-命题逻辑

文章目录 1. 命题逻辑的等值演算与推理演算参考1.1 命题1.2 常用联结词1.3 命题公式命题公式的分类-重言式-矛盾式-可满足式等价关系式-逻辑等价 logically equivalent 1.4 命题的等值演算与推理基本等价式逻辑蕴涵重言式 logically implication重言蕴涵推到归结法 1.5 命题公式…

机器学习——SVM的易错题型

问&#xff1a;支持向量机仅可以用于处理二分类任务 答&#xff1a;错误。支持向量机可以用于处理多分类任务&#xff0c;通过使用一对多或一对一的方法&#xff0c;将多个类别分别与其他类别做二分类。也可以使用多类支持向量机算法&#xff0c;直接将多个类别一起纳入训练和…

3、Typescript中补充的六个类型

1、元组 元组可以看做是数组的拓展&#xff0c;它表示已知元素数量和类型的数组。确切地说&#xff0c;是已知数组中每一个位置上的元素的 类型&#xff0c;来看例子&#xff1a; let tuple: [string, number, boolean]; tuple ["a", 2, false]; tuple [2, "…

网络设备发现工具

什么是网络设备发现 网络设备发现是识别和映射网络基础架构&#xff08;如路由器、交换机、集线器、防火墙、无线接入点、服务器、虚拟机等&#xff09;中存在的设备和接口的过程。网络发现是网络管理的第一步&#xff0c;也是成功监控解决方案的关键。该过程不仅涉及发现网络…

LINUX SVN 新建项目

从第三方代码创建代码库&#xff1a; 1、通过客户端进入服务端 2、在对应的目录创建新的项目/目录 在对应的目录右击 &#xff1a;creat folder... 例&#xff1a;创建testSvn 3、在客户端checkout(co) testSvn 4、将第三方源码(srcTest)拷贝到客户端下的对应路径 防止L…

Cesium 实战-最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层

Cesium 实战-最新版&#xff08;1.104.0&#xff09;通过异步方式初始化地球&#xff0c;加载影像以及高程图层 遇到问题初始化底图初始化高程&#xff08;监听载入完成事件&#xff0c;开启关闭高程&#xff09;初始化 3dtile在线示例 Cesium 最新版&#xff08;1.104.0&#…