公司導入 Laravel 分享 - 3. 路由
開啟 routes 資料夾,裡面有幾個不同的檔案,分別用在不同的情境,但其實裡面的寫法是一樣的,差別在於 Middleware 不一樣。
我們寫網站最常用的當然是 web.php,基本上網站的路由都應該放在這裡,因為這個檔案裡的路由都會受到 web 這個 Middleware 的保護。
如果有不同的傳輸方式都要套用到同樣的動作,那我們可以使用 match。
我們寫網站最常用的當然是 web.php,基本上網站的路由都應該放在這裡,因為這個檔案裡的路由都會受到 web 這個 Middleware 的保護。
一、基本
最基本的 route 使用方法,由 Route::[傳輸方式]('[網址規則]', [處理函式]) 組成。上面這個例子代表網站根目錄要給使用者看到 welcome 這個 View。 我們也可以回傳不同的東西,例如:字串。
- Route::get('/', function () {
- return view('welcome');
- });
如果有不同的傳輸方式都要套用到同樣的動作,那我們可以使用 match。
- Route::match(['get', 'post'], '/', function () {
- //
- });
二、參數
在 5.3 以後可以使用正規表達式來限制變數的內容,但我個人覺得不常用,所以需要自己查官網。
- Route::get('post/{id}', function ($id) {
- return '文章 id:' . $id;
- });
三、給 route 一個名字
下面兩個方法都可以,不過我個人偏好第二種。為什麼要幫 route 取名字呢?因為這樣我們可以在其他程式裡方便快速的使用他們。
- Route::get('post', ['as' => 'post.index', function () {
- //
- }]);
- Route::get('post', function () {
- //
- })->name('post.index');
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
重點在於變數名字要一樣,如果不一樣的話 binding 不起來。 在網址的地方其實我們還是帶 id(primary key) 進去,只是我們可以減少自己去資料庫查詢的動作,Laravel 會幫我們做好。
- Route::get('post/{post}', function (App\Post $post) {
- return $post->title;
- });
留言
張貼留言