前言:RESTful是一種設計思想、一種普遍接受的規范。我們的資源控制器,和RESTful有着莫大的聯系,要理解資源控制器,必須先了解RESTful。
背景介紹
REST這個詞,是Roy Thomas Fielding在他2000年的博士論文中提出的。
Fielding是一個非常重要的人,他是HTTP協議(1.0版和1.1版)的主要設計者、Apache服務器軟件的作者之一、Apache基金會的第一任主席。所以,他的這篇論文一經發表,就引起了關注,並且立即對互聯網開發產生了深遠的影響。
Fielding將他對互聯網軟件的架構原則,定名為REST,即Representational State Transfer的縮寫。我對這個詞組的翻譯是"表現層狀態轉化"。
如果一個架構符合REST原則,就稱它為RESTful架構。
要理解RESTful架構,最好的方法就是去理解Representational State Transfer這個詞組到底是什么意思,它的每一個詞代表了什么涵義。如果你把這個名稱搞懂了,也就不難體會REST是一種什么樣的設計。
一、控制器生成
Laravel
的資源控制器原生的支持了RESTful
架構。其實laravel的資源控制器和其他控制器沒什么直接區別,只是對控制器類的方法和結構略有規定,不過我們並不要手動創建資源控制器,我們可以利用laravel的命令行工具——artisan
。
在laravel
框架根目錄下,通過命令行輸入命令
php artisan make:controller TestController
注意:在
laravel5.1
中用php artisan
生成的控制器會有默認的方法index
、create
、show
、edit
...等等;如果不是使用Restful
不需要默認的方法可以在laravel
框架根目錄下,通過命令行輸入命令
php artisan make:controller TestController --plain
laravel5.2以后生成控制器是默認沒有
index
、create
、show
、edit
..等幾個方法的,如果想生成默認的方法 可以在laravel
框架根目錄下,通過命令行輸入命令
php artisan make:controller TestController --resource
就可以創建一個名為TestController的資源控制器,文件默認在app/Http/Controllers下。我們打開TestController.php,發現里面已經寫好了許多方法,比如index、create、show等等。分別是什么意思?如何在路由定義才能訪問到?
我們如果要在路由里定義一個資源控制器只需要一條:
Route::resource('/test', 'TestController');
下面介紹下RESTful的跳轉規則:
請求URL: /test
請求方式:GET
默認進入控制器的方法:index()
一般用於:頁面展示/列表展示
請求URL: /test/create
請求方式:GET
默認進入控制器的方法:create()
一般用於:添加/新建
請求URL: /test
請求方式:POST
默認進入控制器的方法:store()
請求URL: /test/{id}/edit
請求方式:GET
默認進入控制器的方法:edit($id)
一般用於:修改頁面
請求URL: /test/{id}
請求方式:PUT
PUT方法需要定義一個隱藏表單
<input type="hidden" name="_method" value="put"/>
默認進入控制器的方法:update($id)
一般用於:接收修改的方法
請求URL: /test/{id}
請求方式:GET
默認進入控制器的方法:show($id)
一般用於:XX詳情
請求URL: /test/{id}
請求方式:GET
默認進入控制器的方法:destroy($id)
一般用於:刪除
大概舉兩條解釋。
我定義了個資源路由
Route::resource('/test', 'TestController');
當我訪問地址http://www.blog8090.com/test
,相當於訪問控制器TestController
的index
方法。
當我訪問地址http://www.blog8090.com/test/create
,就會訪問到create
方法。
當我通過POST
提交數據至地址http://www.blog8090.com/test
,相當於由store
方法處理。
現在理解了嗎?通過資源控制器,我們很容易實現一個符合RESTful
架構的接口,這種很適合作為APP
后端開發時使用。這種規范下,不但訪問策略清晰易理解,更容易維護。也使你的架構更為合理和現代化。
簡單舉例如果在路由中全部定義
Route::get('/test', 'TestController');
Route::post('/test', 'TestController');
Route::get('/testEdit', 'TestController@edit');
Route::post('/testUp', 'TestController@up');
Route::controller('/addTest','TestController');
和Restful
寫法(寫一個路由可以包含很多種動作,當然有些特定方法不夠用的時候也得指定方法)會讓臃腫的路由更加簡易
Route::resource('/test', 'TestController');
Route::resource('/test_blog', 'TestController@blog');
是不是比較起來要幽雅的很多??
[原文地址](http://www.blog8090.com/)