PHP-Laravel入門使用(路由)
- 2020 年 3 月 27 日
- 筆記
二、Laravel入門使用(路由)
什麼是路由:將用戶的請求按照事先規劃的方案提交給指定的控制器或者功能函數來進行處理.【通俗的講,路由就是訪問地址形式】 在部落格中,當我們在URL地址中,傳遞p(平台)、c(控制器)、a(方法)三個參數時,系統會自動跳轉到指定模型中指定控制器的指定方法,這些處理過程都是由框架自動完成的。但是,在Laravel框架中,其並沒有指定固定參數,其路由必須要手工進行配置。
1、路由配置文件位置
路由文件在routes/web.php。

後續我們自己定義的路由都需要在該文件中去聲明。
2、routesweb.php配置文件中配置路由(重點)
(1)默認根路由 問題:為什麼當我們在瀏覽器中訪問虛擬域名http://域名時,如何顯示Laravel5?
答:原因是在路由文件web.php中,其已經定義好了一個路由,這個路由稱之為「根路由」,一般用於訪問網站的首頁。

(2)路由定義格式: Route::請求方式(『請求的URL』, 匿名函數或控制器響應的方法)
比如請求域名下根目錄
Route::get('/',function(){return 'hello world』;});
函數的返回值,就是請求的響應。

頁面上的顯示:

又比如請求:http://域名/home地址則路由寫成: Route::get(』/home』,function(){return 『您當前訪問的是/home地址』;}); 顯示:

注意:路由地址中的第一個「/」可以不寫(包括「根路由」)。
如果還有更多的路由需要去定義,則仿照上述的形式語法繼續編寫即可。但是只要需要訪問,則必須需要定義路由。 如果路由錯誤或者沒有定義則會看到以下錯誤頁面(以Laravel5.4.30為準)

如果是5.5以後的版本,則提示如下:

(3)請求方式有哪些?

如果要解決「」這樣的問題,則需要下面的兩個方法解決:

常見的四個方法:
get方法:表示匹配請求類型為get的請求; post方法:表示匹配請求類型為post的請求; macth方法:表示匹配用戶指定的幾個請求類型(通過第一個參數去指定)的請求; 語法:Route::match([『get』,』post』,』…』],$url,$calback); any方法:表示匹配路由所支援的全部請求類型;
如果路由方法與實際的請求類型不一致,則會報錯

在5.5及以後的版本中報錯如下:

3、路由參數
路由參數其實就是給路由傳遞參數。 參數分為必選參數和可選參數。
必選參數:一旦在路由中定義了,則必須傳遞,不傳遞就會報錯。
例如: Route::get(『home1/{id}』,function($id){ echo 『輸入的id是』 . $id; });
路由參數的傳遞通過路由地址中的「{參數名}」的形式來進行傳遞,該形式是必選參數的形式,可以選的則使用「{參數名?}」。

如果設定了可選路由參數,但是又沒有給默認值同時也沒傳遞,則報錯:

擴展: 路由參數除了上述的2種傳遞方式之後,還支援傳統的路由參數傳遞:
url?id=xxx&aaa=xxxx
這種方式傳遞參數不受路由的限制的,不需要在路由文件中事先定義好路由參數,例如:


4、路由別名(alias)【重點】
路由別名相當於在路由定義的時候,為路由起了一個別名,在以後的程式中可以通過這個別名來獲取路由的資訊。/absafvdsadssdbfdsfa/qwdasd1312213fberfdvf/ascdfadvs => url1
後期在視圖中會頻繁使用到這樣的程式碼「<a href=』{{route(『url1』)}}』>xxxx</a>」
場景:在後期需要頻繁的定義跳轉地址,但是如果這些地址寫死了的話,萬一發生變化,得全部修改,這個操作比較麻煩,因此可以使用路由別名的機制(定義路由的時候給路由起名字,在後期需要使用路由的時候直接調用名字)去簡化以後的操作。
給路由起名字的語法: Route::請求類型(路由地址,響應方法) -> name(別名);
例如:給hello的路由起名字「h1」

調用該路由則可以寫成:route(『名字』);例如像剛才的h1,則需要寫成route(『h1』) 擴展補充:查看系統已經有的路由命令:#php artisan route:list

5、路由群組(理解)【實用】
有後台有如下路由
/admin/login /admin/logout /admin/index /admin/user/add /admin/user/del .....
他們的共同點(這個共同點不局限於只是前綴)是,都有/admin/前綴,為了管理方便,可以把他們放到一個路由分組中,這個分組稱之為路由群組。
使用prefix屬性指定路由前綴,也就是其路由中都具備的相同部分。
語法:Route::group(公共屬性數組,回調函數); 回調函數中放的剔除公共屬性之後的路由
比如,想要為所有路由URLs前面添加前綴admin
Route::group(['prefix' => 'admin], function () { Route::get(login, function () { // 匹配 "/admin/login" URL }); Route::get(logout, function () { // 匹配 "/admin/logout" URL }); Route::get(user/add, function () { // 匹配 "/admin/user/add" URL }); });
記住:以大局為重。
案例:編寫路由/home/test/test1和/home/test/test2,要求使用路由群組 公共點:/home/test
Route::group([『prefix』 => 『home/test』],function(){ Route::get(『test1』,function(){ }); Route::get(『test2』,1function(){ }); });

注意:使用路由群組不會改變其原有在地址欄中輸入的地址。變的只是路由定義的寫法。
在後期還會接觸到middleware(中間件)屬性。