本系列文章已集結成冊與鐵人賽文章差異內容,有以下幾點:
更新至Laravel 8、基礎的PHP重點筆記、加強製作API流程細節、加入程式設計模式,優化、重構程式碼的部分,並且於書籍前面的章節介紹Git。
讓您從製作第一個簡單的API到優化自己的程式碼,分享我的經驗給您,打造自己的最強大腦API,若有興趣的朋友可以參考看看
先前我們提到的,需要一個
物件(Object) 來操作,這邊我們是 動物 這個物件資源
動作(Action)有 新增、刪除、修改、查詢
以及設定讓各個要介接的開發者有URI可以請求
產生一個Model,我自己是把它理解成建立一個我們要操作的物件。
例如:操作文章的動作,那我就會新建一個 Post 的Model
如果我的需求是需要 User 使用者的 操作,那我就會建立一個 User 的Model
C:\project\animal\ > php artisan make:model Animal -rmc
後方 -rmc
的意思是在建立Model 同時建立
M
igrationC
ontroller ( r
的意思是載入預設CRUD方法)總共產生三個檔案
2019_08_22_201730_create_animals_table.php
(Migration)AnimalController.php
(Controller)Animal.php
(Model)指令有加入r
變數,所以打開AnimalController.php
可以看到已經有很多方法寫在裡面。
另外 2019_08_22_201730_create_animals_table.php
前面的日期時間是產生檔案時自動產生的紀錄。(你的可能跟我不相同,不過沒關係!)
接下來打開 api.php
設定路由。
Route::apiResource('animal', 'AnimalController');
apiResource
是 Laravel 內建的方法,可以把 URI 自動對應到 AnimalController 內相對應的方法。
可以下指令
C:\project\animal\ > php artisan route:list
查看路由如下圖所示
因為我們設定 URI 為 animal 所以會以這個字串對應到 AnimalController 的方法,因為可以不一樣,特別強調一下。
拿路由表的其中一個解釋一下
Method | URI | Name | Action | Middleward |
---|---|---|---|---|
GET | /api/animal/{animal} | anumal.show | App\Http\Controllers\AnimalController@show | api |
這是一個查看單一動物資料的設定。動詞 GET 查詢 URI http://127.0.0.1:8000/api/animal/{animal} ,前面api前贅詞是因為把方法寫在 api 這一路的路由,{animal} 表示動物的ID,查詢ID1動物的資料 URI長得像這樣 http://127.0.0.1:8000/api/animal/1 ,並且對應到AnimalController 裡面的 show 方法。
好了我們到這裡已經順利的把一個資源基本的東西建立起來,但還有資料庫的部分以及新增、刪除、修改、查詢的實際功能
需求是可以讓想認養的人可以看到浪浪資訊,所以我打算儲存下面的內容。
欄位名 | 說明 | 格式 | 備註 |
---|---|---|---|
id | ID | bigInteger(10) unsigned | |
type_id | 動物分類 | int(10) unsigned | |
name | 動物的暱稱 | varchar(255) | |
birthday | 生日 | date NULL | |
area | 所在地區 | varchar(255) NULL | |
fix | 結紮情形 | tinyint(1) | 預設 false |
description | 簡單敘述 | text NULL | |
personality | 動物個性 | text NULL | |
created_at | 新建時間 | timestamp NULL | |
updated_at | 更新時間 | timestamp NULL |
最近在學習Laravel 按照著大大步驟慢慢學習
想請問為什麼我得按照的程式碼輸入但是我的路由卻沒有出現五個呢?
是哪個地方出現問題還請指點一下
我也遇到了一樣的問題。
到app/Providers/RouteServiceProvider.php中將protected $namespace = 'App\Http\Controllers';的注解拿掉。
之後在command line下php artisan route:list應該就可以看到你要的結果了。以下網址供參:https://stackoverflow.com/questions/63807930/target-class-controller-does-not-exist-laravel-8
你們好!
如果使用Laravel8 寫路由的方式有點不一樣,這系列文章當時寫的時候是5.8版本,請嘗試將
Route::apiResource('animal', 'AnimalController');
改成
use App\Http\Controllers\AnimalController;
Route::get('/animal', [AnimalController::class, 'index']);
路由寫法應該是這樣(Laravel 8)
Route::apiResource('animals', AnimalController::class);