公司導入 Laravel 分享 - 3. 路由

開啟 routes 資料夾,裡面有幾個不同的檔案,分別用在不同的情境,但其實裡面的寫法是一樣的,差別在於 Middleware 不一樣。
我們寫網站最常用的當然是 web.php,基本上網站的路由都應該放在這裡,因為這個檔案裡的路由都會受到 web 這個 Middleware 的保護。

一、基本

最基本的 route 使用方法,由 Route::[傳輸方式]('[網址規則]', [處理函式]) 組成。
Route::get('/', function () {
    return view('welcome');
});
上面這個例子代表網站根目錄要給使用者看到 welcome 這個 View。 我們也可以回傳不同的東西,例如:字串。
如果有不同的傳輸方式都要套用到同樣的動作,那我們可以使用 match。
Route::match(['get', 'post'], '/', function () {
    //
});

二、參數

Route::get('post/{id}', function ($id) {
    return '文章 id:' . $id;
});
在 5.3 以後可以使用正規表達式來限制變數的內容,但我個人覺得不常用,所以需要自己查官網。

三、給 route 一個名字

下面兩個方法都可以,不過我個人偏好第二種。
Route::get('post', ['as' => 'post.index', function () {
    //
}]);
 
Route::get('post', function () {
    //
})->name('post.index');
為什麼要幫 route 取名字呢?因為這樣我們可以在其他程式裡方便快速的使用他們。
return redirect()->route('post.index');
<a href="{{ route('post.index') }}">文章</a>

四、指定 Controller

Route::get('post', 'PostController@index')->name('post.index');

五、Group

當我們有很多 route 都共有一些設定的時候我們可以使用 group 把他們包起來,代表這些 route 都套用設定。最常見的就是 middleware、prefix。
Route::group(['middleware' => 'auth', 'prefix' => 'admin'], function () {
    Route::get('post', 'PostController@index')->name('post.index');
    Route::get('post/create', 'PostController@create')->name('post.create');
});

六、Route Model Binding

Route::get('post/{post}', function (App\Post $post) {
    return $post->title;
});
重點在於變數名字要一樣,如果不一樣的話 binding 不起來。 在網址的地方其實我們還是帶 id(primary key) 進去,只是我們可以減少自己去資料庫查詢的動作,Laravel 會幫我們做好。

留言