Featured image of post Day 5. 路由: Router

Day 5. 路由: Router

資源

Laravel7 30天: 目錄
專案連結: github - laravel7 之 30 天分享

前言

專案連結: github - laravel7 之 30 天分享

上一篇: Day 4. VSCode 套件推薦

今天來跟大家分享,使用者的第一個路口:路由

使用

可以先看看[官方文件](https://laravel.com/docs/7.x/routing 官方文件)

Route 的設定在 routes/ 裡面,平常最常使用的是 web.phpapi.php
頁面用 web.php、API則可以使用 api.php
使用的語法是相同的,今天會以 web.php為範例進行介紹,

基本語法

1
2
3
4
5

# method: GET, 路徑: /hello ,直接回傳: Hello World
Route::get('hello', function () {
    return 'Hello World';
});

不過通常我們都會這樣使用,
路由只設定路由,這個路由要幹嘛都會交給 Controller 處理,

1
2
3

# method: GET, 路徑: /basicRouteUseController ,交給 BasicRouteController 的 Controller Class,Function 是 index() 
Route::get('/basicRouteUseController', 'BasicRouteController@index');

方法

Laravel 提供的路由有很多 method 可以設定,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Route::get($uri, $callback);

# 單純 post 
Route::post($uri, $callback);

# post 通常使用在更新 
Route::put($uri, $callback);
Route::patch($uri, $callback);

# post 刪除
Route::delete($uri, $callback);

# 這個我沒有使用過
Route::options($uri, $callback);

post如要設定其他 method 可於 html form 表單內設定 @method('PUT')

1
2
3
<form>
    @method('PUT')
</form>

參數

參數使用大括號{}框起來,然後在 function 裡加參數即可使用

1
2
3
4
5
6
7
8
# /route/web.php
Route::get('/basicRouteWithParam/{id}', 'BasicRouteController@show');

# /app/Http/Controllers/BasicRouteController.php @ show()
public function show($id) 
{
    echo $id;
}

命名

通常我所有的路由都會命名,這樣之後要使用上可以使用 helper 的 route() 直接調用,
萬一哪天 uri 要變更時,只要異動 routes/web.php 即可,
因為所有頁面都是使用 route name 調用
使用方法

1
2
Route::get('/basicRouteDefineName', 'BasicRouteController@defineName')
    ->name('thisIsBasicRouteDefineName');

如範例就可以使用 route('thisIsBasicRouteDefineName') 取得這個路由

群組

官方有提供 Route::group 可以將路由們分組
使用方式

1
2
3
4
5
6
7
# prefix = 前綴
# as = name 的前綴
Route::group(['prefix' => 'routeGroups', 'as' => 'routeGroups' ], function() {
    Route::get('/a', 'RouteGroupController@a')->name('a');
    Route::get('/b', 'RouteGroupController@b')->name('b');
    Route::get('/c', 'RouteGroupController@c')->name('c');
});

群組後,其實就等於是 …

1
2
3
4
5
Route::group(['prefix' => 'routeGroups', 'as' => 'routeGroups' ], function() {
    Route::get('/routeGroups/a', 'RouteGroupController@a')->name('routeGroups.a');
    Route::get('/routeGroups/b', 'RouteGroupController@b')->name('routeGroups.b');
    Route::get('/routeGroups/c', 'RouteGroupController@c')->name('routeGroups.c');
});

表達上是一樣的,只是比較好閱讀而且看起來比較整齊

小撇步

CRUD 肯定是一個頁面滿基本的需求,我通常會這樣設定, 之後再跟大家聊聊為何我都會這樣設定吧

以會員『新增』、『修改』、『刪除』為範例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Route::group(['prefix' => 'users', 'as' => 'users.'], function () {
    
    // 列表
    Route::get('/', 'UserController@index')->name('index');
    
    // 新增
    Route::get('/create', 'UserController@create')->name('create');
    Route::post('/', 'UserController@store')->name('store');
    
    // 編輯
    Route::get('/{user}/edit', 'UserController@edit')->name('edit');
    Route::patch('/{user}', 'UserController@update')->name('update');
    
    // 刪除
    Route::delete('/{user}', 'UserController@destroy')->name('destroy');
});
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy