Laravel Study(Route)

基本路由

Route 意思為路由,簡單說就是設定你輸入什麼網址,他會顯示什麼頁面而已

設定的檔案位置在 app\Http\routes.php,目前只有設定一個 Route 規則

1
2
3
Route::get('/', function () {
return view('welcome');
});

除了 get 之外還可以使用

1
2
3
4
5
6
Route::get      ($uri, $callback);  // 讀取
Route::post ($uri, $callback); // 新增(會多新增一個)
Route::put ($uri, $callback); // 新增(如果存在則覆蓋,不存在新增一個)
Route::patch ($uri, $callback); // 更新
Route::delete ($uri, $callback); // 刪除
Route::options ($uri, $callback);

網址加參數可以使用

1
2
3
Route::get('user/{id}', function ($id) {
return '使用者 ID = '.$id;
});

網址輸入 http://localhost/root/public/user/123

就會出現 使用者 ID = 123,多個參數一樣用大括號包起來

1
2
3
4
5
Route::get('user/{id}/{name}', function ($id, $name) {
return '使用者 ID = '.$id.' 姓名 = '.$name;
});
// http://localhost/root/public/user/123/Jason
// 使用者 ID = 123 姓名 = Jason

如果你想要將參數設為可選的(可加可不加)可以寫成

1
2
3
4
5
Route::get('user/{name?}', function ($name = 'Sharon') {
return '姓名 = '.$name;
});
// http://localhost/root/public/user (注意 user 後面不要加 '/')
// 姓名 = Sharon

限制參數

參考

限制參數只能為數字,使用 where 寫法

1
2
3
4
5
Route::get('user/{id}', function ($id) {
return '使用者 ID = '.$id;
})->where('id','[0-9]+');
// http://localhost/root/public/user/1122 (合法)
// http://localhost/root/public/user/abc (錯誤)

也可以改用 pattern 寫法,這種寫法是全域的

之後新增的 route 中要是有 id 也會限制為數字

1
2
3
4
Route::pattern('id','[0-9]+');
Route::get('user/{id}', function ($id) {
return '使用者 ID = '.$id;
});

如果要限制多個參數可以使用

1
2
3
4
5
6
7
Route::get('user/{id}/{name}', function($id, $name)
{

// Only called if {id} is numeric and {name} is character A to Z only.
})->where(array(
'id' => '[0-9]+',
'name' => '[A-Z]+'
));

列出目前所有 Route 設定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
php artisan route:list
+--------+----------+------------------------------+----------------------+---------------------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------------+----------------------+---------------------------------------------------------------+------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | _debugbar/assets/javascript | debugbar.assets.js | Barryvdh\Debugbar\Controllers\AssetController@js | |
| | GET|HEAD | _debugbar/assets/stylesheets | debugbar.assets.css | Barryvdh\Debugbar\Controllers\AssetController@css | |
| | GET|HEAD | _debugbar/clockwork/{id} | debugbar.clockwork | Barryvdh\Debugbar\Controllers\OpenHandlerController@clockwork | |
| | GET|HEAD | _debugbar/open | debugbar.openhandler | Barryvdh\Debugbar\Controllers\OpenHandlerController@handle | |
| | GET|HEAD | user/{id} | | Closure | web |
+--------+----------+------------------------------+----------------------+---------------------------------------------------------------+------------+

// 另外可以搜尋 name 或 path
php artisan route:list --name=debug
php artisan route:list --path=user

進階設定

你可以替 Route 命名,例如

1
2
3
4
5
6
7
Route::get('user/{id}', ['as' => 'user.id', function ($id) {
return '使用者 ID = '.$id;
}]);

// 之後你在其他 view 中可以使用下面寫法
// 網址就會是 : http://localhost/root/public/user/1122
<a href="{{ route('user.id','1122') }}">連結測試</a>

參考

Laravel 說明

中文官方網站

英文官方網站

影片教學

參考教學-Laravel Dojo