所謂CRUD是Create、Read、Update、Delete。昨天已經從資料庫模型(Model)的角度看過基本操作了,今天要將些操作加入到控制器(Controller)。
C | Create
R | Read
U | Update
D | Delete
另外,還需要另外知道的一件事情是RESTful。RESTful並不是硬性規定,只是一種在HTTP請求上的一種慣例設計。通常HTTP請求方法有GET
、POST
、PUT
、DELETE
、PATCH
,以及HEAD
、CONNECT
、OPTIONS
、TRACE
。以下節錄自MDN:
GET GET 方法請求展示指定資源。使用 GET 的請求只應用於取得資料。 HEAD HEAD 方法請求與 GET 方法相同的回應,但它沒有回應主體(response body)。 POST POST 方法用於提交指定資源的實體,通常會改變伺服器的狀態或副作用(side effect)。 PUT PUT 方法會取代指定資源所酬載請求(request payload)的所有表現。 DELETE DELETE 方法會刪除指定資源. CONNECT CONNECT 方法會和指定資源標明的伺服器之間,建立隧道(tunnel)。 OPTIONS OPTIONS 方法描述指定資源的溝通方法(communication option)。 TRACE TRACE 方法會與指定資源標明的伺服器之間,執行迴路返回測試(loop-back test)。 PATCH PATCH 方法套用指定資源的部份修改。
其實也就差不多對應了CRUD的操作:
CRUD | RESTful |
---|---|
Create | POST / PUT |
Read | GET |
Update | PATCH / PUT |
Delete | Delete |
不過終究是慣例而已,雖然HTTP Method的定義,在RFC 5789有所說明,不過不同的網頁框架,可能輕易的讓你做不同實做,甚至提供其他Method。
當然,可以繼續在原本建立好的控制器--Blog/ExamplePostController
直接改寫,不過今天要使用Artisan直接建立資源控制器的模板:
artisan make:controller Blog/PostController --resource
多加了--resource
後,產生的模板完全不同,打開app/Http/Controller/Blog/PostController.php
來看看吧!
<?php
namespace App\Http\Controllers\Blog;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class PostController extends Controller
{
public function index(){}
public function create(){}
public function store(Request $request){}
public function show($id){
return "Hello, Blog Post Example"; // 先隨便在`show`回傳個字串,等等嘗試看看
}
public function edit($id){}
public function update(Request $request, $id){}
public function destroy($id){}
}
跟之前相比....可真是多了許多方法阿.....其中有一些也對應了CRUD。在說明之前,先來加入資源路由:
web.php
Route::group(['prefix' => 'blog',
'as' => 'blog/',
'namespace' => 'Blog', ],
function(){
// Route::get('/post/{post_id}', "ExamplePostController@show");
Route::resource('/post',"PostController");
});
不需要原本的Controller
和路由了,大可刪除。透過官網文件,稍做修改可以得到下表:
CRUD | Verb | URI | Action | Route Name | 備註 |
---|---|---|---|---|---|
GET | /blog/post | index | blog/post.index | 總體清單 | |
GET | /blog/post/create | create | blog/post.create | 建立頁面 | |
Create | POST | /blog/post | store | blog/post.store | |
Read | GET | /blog/post/{post_id} | show | blog/post.show | 顯示頁面 |
GET | /blog/post/{post_id}/edit | edit | blog/post.edit | 編輯頁面 | |
Update | PUT/PATCH | /blog/post/{post_id} | update | blog/post.update | |
Delete | DELETE | /blog/post/{post_id} | destroy | blog/post.destroy |
透過Route::resource
快速簡單地註冊了許多路由。透過artisan route:list
會發現增加了類似的結果,原本的/blog/post/{post_id}
也取代掉了。
你可以先學上方在show()
方法添加回傳字串,再一次瀏覽http://localhost/blog/post/12 看看。
意外光是設定就這麼多內容了....
都還沒對資料庫操作呢...
只好在分上下兩篇。
依情況...可能還會多一個中篇