今天也來講講route的其他部分
如果覺得路由名稱太長,你也可以自行命名路由的名稱,這樣方便重導向或是指定特定的路由,而我們需要做的就是加上name這個方法就可以了,那我就來實際操作看看。
下面程式碼中看到了兩個路由,分別用數字1跟2來區分。
首先先進到1號路由,第一個參數中,{id}這部分是可以抓到來自url上面的參數,而為什麼又多一個問號呢?問號代表的是這個參數可以是空值,不一定要給id,而後面閉包的參數也有新增一些東西,因為參數可能為空,所以就需要有預設值,這邊就設定是id=null,預設不一定是null,這樣也可以使用is_null來判斷是否有傳進來id。
再來看看2號路由,我們把/student/profile縮短成了profile,這樣1號路由在重導向就只要輸入profile就可以了,對於一些很長的網址馬上縮短了不少,也可以增加程式碼的維護性。
//1號路由
Route::get('/users/{id?}',function($id=null){
if(!is_null($id)){
//如果有id就重導向至/student/profile
return redirect()->route('profile');
}else{
return '無使用者資料';
}
});
//2號路由
Route::get('/student/profile',function(){
return '已查到使用者資料';
})->name('profile');
可以在路由之前加入共同的middleware(中間件)。
為什麼要這樣做呢?如果你是有註冊的會員,可以先在middleware中寫一些驗證會員的邏輯,這樣就不用每一個路由前面都需要加上一樣的驗證程式碼。
那要怎麼實作呢?Route::middleware裡面的參數為陣列,可以同時放多個middleware,在後面需要加上group的方法,在後面就可以放進要驗證的路由。
Route::middleware(['first', 'second'])->group(function () {
Route::get('/', function () {
// 使用 first 和 second 中間件
});
Route::get('user/profile', function () {
// 使用 first 和 second 中間件
});
});
這邊先讓大家有個印象,以下的程式碼還不能執行唷,還少了資料庫跟model的部分。
模型(model)就是可以對資料庫操作的orm,在後續章節會討論,這邊先簡單帶過。
下面看到了function中加上了App\User,model在新增時會在App的目錄下面,這邊就是指User的model,後面是變數名稱,而變數名稱預設一般都會以model名稱小寫來當變數,laravel會自動對應到該model裡面。
Route::get('api/users/{user}', function (App\User $user) {
return $user->email;
});
第二種寫法
//把model寫在檔案最上面,使用use來載入User的model
//在function中就只要寫User就可以了,是不是方便很多
use App\User
Route::get('api/users/{user}', function (User $user) {
return $user;
});
今天路由的部分已經告一段落,明天會講到controller的使用方法。