應用程式介面的主要目的就是提供使用者與介面互動(Interaction),其中 URL 可以取得使用者的資訊並且渲染在畫面中,例如 query string,就是透過最基本的 GET request 來獲取信息:
routes
在路由頁面設定想要回應到前端的資訊,有幾種方式:
simple data
回傳簡單的關聯式陣列:
關聯式陣列可以想做類似 javascript 的物件一樣,鍵值對(key-value pair)的形式.
routes/web.php1 2 3 4 5 6 7 8
   | Route::get('/greetings', function () {   $datas = [     [        "name" => "Abby"     ]   ];   return $datas; });
  | 
 
Views
回傳資料至 blade 模板,渲染 html
routes/web.php1 2 3 4 5 6 7 8
   | Route::get('/greetings', function () {   $datas = [     [        "name" => "Abby"     ]   ];   return views('greetings', $datas); });
  | 
 
直接將傳遞過來的關聯式陣列 key 傳進來當變數名
resource/views/greetings.blade.php1 2 3 4 5 6 7 8 9 10 11 12
   | <!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8">   <meta http-equiv="X-UA-Compatible" content="IE=edge">   <meta name="viewport" content="width=device-width, initial-scale=1.0">   <title>Greetings</title> </head> <body>   <h1>Hello! {{ $name }}</h1> </body> </html>
   | 
 
query string 參數
變數也可以使用既有的 request() 方法承接 URL ? 後方的 key 來渲染到畫面中,讀取 GET 參數:
request()
routes/web.php1 2 3 4 5 6 7 8 9
   | Route::get('/cat', function () {      $catNumbers = request('catNumbers');   $datas = [     "catNumbers" => strip_tags($catNumbers)   ];      return view('cat', $datas); });
  | 
 
resource/views/cat.blade.php1 2 3 4 5 6 7 8 9 10 11 12
   | <!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8">   <meta http-equiv="X-UA-Compatible" content="IE=edge">   <meta name="viewport" content="width=device-width, initial-scale=1.0">   <title>Cat Route</title> </head> <body>   <h1>這裡有{{ $catNumbers }}隻貓</h1> </body> </html>
   | 
 
為了避免 XSS 攻擊注入惡意程式到 app 中,可以為你的 request 包覆 strip_tags(),動態路由則不需要。
設置概覽資料
若使用者沒有查詢任何關鍵字(例如衣服),可以設立一個預設顯示的資料(例如展示全部商品):
routes/web.php1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   | Route::get('/cat', function () {      $catNumbers = request('catNumbers');      if(isset($catNumbers)) {     $datas = [       "catNumbers" => strip_tags($catNumbers)     ];     return view('cat', $datas);   } else {          $datas = [       "catNumbers" => '很多'     ];     return view('cat', $datas);   } });
  | 
 
isset() 方法類似 javascript 的 if (variable === undefined),判斷某變數是否存在。  
dynamic routes
可以渲染使用者輸入的資料,動態路由使用 {} 將路由變數名稱包起,爾後經過 GET URL 的方式取得信息,路由設定需要傳入變數至回呼函式中接收:
範例1. 對應的動態路由變數需要傳入回呼函式中
routes/web.php1 2 3 4 5 6 7
   | Route::get('/dog/{dogName}', function ($dogName) {   $datas = [     "name" => "Abby",     "dogName" => $dogName   ];   return view('routesTest', $datas); });
  | 
 
resource/views/greetings.blade.php1 2 3 4 5 6 7 8 9 10 11 12 13
   | <!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8">   <meta http-equiv="X-UA-Compatible" content="IE=edge">   <meta name="viewport" content="width=device-width, initial-scale=1.0">   <title>Greetings</title> </head> <body>   <h1>Hello! {{ $name }}</h1>   <h2>A dog name {{ $dogName }}</h2> </body> </html>
   | 
 
範例2. 傳入多個非必要的動態路由參數
routes/web.php1 2 3 4 5 6 7 8
   | Route::get('/shop/{category?}/{item?}', function ($a = null, $b = null) {   if(isset($a)) {     if(isset($b)) {       return "你正在瀏覽商店${a}分類的${b}品項";     }   }    return '你正在瀏覽商店的所有商品'; });
  | 
 
對應的回呼函式必須接收一樣數量的變數當參數,名稱隨意不過最好與路由同名比較直覺,且位置要按照順序!
非必要的路由參數需要設置:
?放置在{}內,表示為可選的。 
- 非必要路由參數需設置預設值為空
null才不會噴錯。 
        
    
     
    
    
評論