iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
1
Modern Web

30天成為Laravel萌新系列 第 21

30天成爲Laravel萌新(第20天) - 資源控制器(Resource Controller) 上篇

  • 分享至 

  • xImage
  •  

CRUD & RESTful

所謂CRUD是Create、Read、Update、Delete。昨天已經從資料庫模型(Model)的角度看過基本操作了,今天要將些操作加入到控制器(Controller)。

C | Create
R | Read
U | Update
D | Delete

另外,還需要另外知道的一件事情是RESTful。RESTful並不是硬性規定,只是一種在HTTP請求上的一種慣例設計。通常HTTP請求方法有GETPOSTPUTDELETEPATCH,以及HEADCONNECTOPTIONSTRACE。以下節錄自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。

資源控制器(Resource Controller)

當然,可以繼續在原本建立好的控制器--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 看看。

意外光是設定就這麼多內容了....
都還沒對資料庫操作呢...
只好在分上下兩篇。
依情況...可能還會多一個中篇

其他參考資料&延伸閱讀


上一篇
30天成爲Laravel萌新(第19天) - Model的基本操作
下一篇
30天成爲Laravel萌新(第21天) - 資源控制器(Resource Controller) 中篇
系列文
30天成為Laravel萌新32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言