我們?cè)诘谝黄恼乱呀?jīng)描述了在laravel中一些簡(jiǎn)單路由的使用.
那么我們來(lái)回顧一下
1,基礎(chǔ)路由
2,多請(qǐng)求路由
3,路由傳遞參數(shù)
4,路由限制
5,控制器路由
有了第一篇文章的基礎(chǔ)之后呢,我們可以學(xué)習(xí)以下的知識(shí)點(diǎn)
但是,經(jīng)過(guò)上篇文章呢,可能會(huì)有的人有意見(jiàn),為什么呢?
關(guān)于laravel的路由定義,很多人看到后有一個(gè)疑惑:
每條地址規(guī)則都要定義路由郭计,豈不是很累喊衫?
這個(gè)問(wèn)題確實(shí)是個(gè)問(wèn)題处渣,不過(guò),laravel給了我們一個(gè)折中的方案----資源路由倒彰。
資源路由
控制器路由我認(rèn)為主要是解決路由定義繁雜的情況,因?yàn)榇笮偷膽?yīng)用業(yè)務(wù)復(fù)雜,控制器相當(dāng)?shù)亩嗯苋啵覀儾豢赡苊恳粋€(gè)控制器的方法都要定義一個(gè)路由。所以呢資源路由可以幫助我們完美的解決問(wèn)題.但是在解決問(wèn)題之前呢,我們先了解一下資源路由,何為資源呢(RESTful);
RESTful是一種設(shè)計(jì)思想埠巨、一種普遍接受的規(guī)范历谍。
REST這個(gè)詞,是Roy Thomas Fielding在他2000年的博士論文中提出的辣垒。
Fielding是一個(gè)非常重要的人望侈,他是HTTP協(xié)議(1.0版和1.1版)的主要設(shè)計(jì)者、Apache服務(wù)器軟件的
作者之一勋桶、Apache基金會(huì)的第一任主席脱衙。所以,他的這篇論文一經(jīng)發(fā)表例驹,就引起了關(guān)注捐韩,并且立即對(duì)互聯(lián)
網(wǎng)開(kāi)發(fā)產(chǎn)生了深遠(yuǎn)的影響。
Fielding將他對(duì)互聯(lián)網(wǎng)軟件的架構(gòu)原則鹃锈,定名為REST荤胁,即Representational State Transfer的縮
寫(xiě)。我對(duì)這個(gè)詞組的翻譯是"表現(xiàn)層狀態(tài)轉(zhuǎn)化"仪召。
如果一個(gè)架構(gòu)符合REST原則寨蹋,就稱(chēng)它為RESTful架構(gòu)松蒜。
要理解RESTful架構(gòu),最好的方法就是去理解Representational State Transfer這個(gè)詞組到底是什
么意思已旧,它的每一個(gè)詞代表了什么涵義秸苗。如果你把這個(gè)名稱(chēng)搞懂了,也就不難體會(huì)REST是一種什么樣的設(shè)
計(jì)运褪。
大家一定要閱讀該文章惊楼,理解RESTful架構(gòu),文章十分清晰的講述了RESTful秸讹,本文就不再重復(fù)熬述檀咙。
Laravel 的資源控制器使得構(gòu)建圍繞資源的 RESTful 控制器變得毫無(wú)痛苦,例如璃诀,你可能想要在應(yīng)用中創(chuàng)建一個(gè)控制器弧可,用于處理關(guān)于圖片存儲(chǔ)的 HTTP 請(qǐng)求,使用 Artisan 命令 make:controller 劣欢,我們可以快速創(chuàng)建這樣的控制器:
當(dāng)然后面呢我們會(huì)詳細(xì)給大家說(shuō)一下artisan工具的使用
php artisan make:controller PhotoController
該 Artisan 命令將會(huì)生成一個(gè)控制器文件 app/Http/Controllers/PhotoController.php
棕诵,這個(gè)控制器包含了每一
個(gè)資源操作對(duì)應(yīng)的方法。 接下來(lái)凿将,可以為該控制器注冊(cè)一個(gè)資源路由:
Route::resource('photo', 'PhotoController');
這個(gè)路由聲明包含了處理圖片資源 RESTful 動(dòng)作的多個(gè)路由校套,相應(yīng)地,Artisan 生成的控制器也已經(jīng)為這些動(dòng)作設(shè)置了對(duì)應(yīng)的處理方法牧抵。
我們可以打開(kāi)cmd命令行,來(lái)到我們放置laravel框架的根目錄輸入php artisan route:list
會(huì)顯示我們的路由信息,包括每條路由相應(yīng)的請(qǐng)求方式呢,如下:
同樣的來(lái)的呢我們的控制器下,可以看見(jiàn)準(zhǔn)備好了各種方法,和上圖呢相對(duì)應(yīng),從這樣看呢,資源路由能夠避免我們擔(dān)心的那種情況呢.
同樣呢我們還可以通過(guò)資源路由呢來(lái)定義部分資源如:
定義部分資源路由
Route::resource('photo', 'PhotoController',
['only' => ['index', 'show']]);
這樣的意思呢是在PhotoController控制器中呢去使用index和show方法
我們還可以這樣去定義與上述的結(jié)果一樣
Route::resource('photo', 'PhotoController',
['except' => ['create', 'store', 'update', 'destroy']]);
只不過(guò)是only和except要表達(dá)的意思
命名資源路由
默認(rèn)情況下笛匙,所有資源控制器動(dòng)作都有一個(gè)路由名稱(chēng),然而犀变,我們可以通過(guò)傳入 names 數(shù)組來(lái)覆蓋這些默認(rèn)的名字:
Route::resource('photo', 'PhotoController',
['names' => ['create' => 'photo.build']]);
上述呢都是資源路由那么剛接觸laravel框架的可能還不大理解,沒(méi)有關(guān)系,可以直接跳過(guò)這個(gè)部分來(lái)學(xué)習(xí)下面的,回頭再來(lái)看這個(gè)
路由分組
比如一條非常簡(jiǎn)單的控制器路由:
Route::get('admin/login','Admin\UserController@getLogin');
這條路由的意思呢我們可以訪(fǎng)問(wèn)http://www.itbool.com/admin/login
可以訪(fǎng)問(wèn)Admin模塊下的
UserController控制器中的
getLogin`方法,這個(gè)呢大家都可以通過(guò)第一篇文章來(lái)理解.
那么何為路由分組呢??
比如我要在Admin模塊下寫(xiě)注冊(cè)登錄和退出頁(yè)面,那么考慮訪(fǎng)問(wèn)方式的話(huà)我們需要些以下路由:
Route::get('admin/login','Admin\UserController@getLogin');
Route::post('admin/login','Admin\UserController@postLogin');
Route::get('admin/register','Admin\UserController@getRegister');
Route::get('admin/register','Admin\UserController@postRegister');
Route::get('admin/logout','Admin\UserController@getLogout');
這樣看的話(huà)我們書(shū)寫(xiě)的代碼量很多,并且有很多相同的地方,那么怎么樣解決呢?很簡(jiǎn)單,路由分組
首先我們注意:action admin/login admin是路由前綴 prefix去表示
再次注意
Admin\UserController Admin是控制器的命名空間,用namespace去表示,我們可不可以直接把這些相同的東西給省略掉呢,答案是可以的
那么分組下來(lái)就是:
Route::group(['prefix'=>'admin','namespace=>Admin'],function(){
Route::get('login','UserController@getLogin');
Route::post('login','UserController@postLogin');
Route::get('register','UserController@getRegister');
Route::get('register','UserController@postRegister');
Route::get('logout','UserController@getLogout');
});
看到這個(gè)結(jié)果,是不是很驚訝呢?只不過(guò)是把它的路由前綴和命名空間給聲明一下,這樣大家是不是就理解了呢?
相信了解數(shù)據(jù)庫(kù)的同學(xué)可以知道,在數(shù)據(jù)庫(kù)中的表前綴是可以指定的,意思是一樣的
命名路由
命名路由使生成 URLs 或者重定向到指定路由變得很方便妹孙,在定義路由時(shí)指定路由名稱(chēng),然后使用數(shù)組鍵 as 指定路由別名:
Route::get('user/profile', ['as' => 'profile', function () {
//
}]);
上述呢是用匿名函數(shù)去相應(yīng),那么在控制器中如何使用呢:
Route::get('user/profile', [
'as' => 'profile', 'uses' => 'UserController@showProfile'
]);
路由分組 & 命名路由
如果你在使用路由分組弛作,可以在路由分組屬性數(shù)組中指定 as 關(guān)鍵字來(lái)為分組中的路由設(shè)置一個(gè)共用的路由名前綴:
Route::group(['as' => 'admin::'], function () {
Route::get('dashboard', ['as' => 'dashboard', function () {
// 路由被命名為 "admin::dashboard"
}]);
});
那么在laravel框架中呢,路由就是這樣的,通過(guò)第一篇和第二篇laravel中的路由大家基本可以掌握了