:::

12. 建立商品詳情頁的路由

  1. 點進去某個商品,路由是連到 product/{{$product->id}},所以,在/專案/routes/web.php新增一筆路由資料
    Route::get('/product/{id}', 'ProductController@show')->name('product.show');
  2. 路徑中的 {id} 可以直接在控制器中變成變數$id使用,所以,無須自己帶參數過去。不過路由的參數和控制器的變數是以先後位置來對應的,無關名稱,換言之,控制器中不命名為 $id 也是可以的。
  3. 如果該參數可有可無,那麼可以寫成 {id?} 這樣的方式。
  4. 如果路由有參數,且確定其格式,那麼可以用->where() 限制參數格式(否則product/create 中的 create 也可能會被當成id),例如:限制id 只允許 0~9 的數字,如此可以降低路由被誤判的機會
    Route::get('/product/{id}', 'ProductController@show')->name('product.show')->where('id', '[0-9]+');
  5. 如果同一個參數要限制格式,且有好幾個 Route 要用,則可用 Route::pattern() 方式來統一宣告(記得放最上面):
    Route::pattern('id' , '[0-9]+');
  6. 最後,整個路由看起來像這樣:
    <?php
    
    /*
    |--------------------------------------------------------------------------
    | Web Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register web routes for your application. These
    | routes are loaded by the RouteServiceProvider within a group which
    | contains the "web" middleware group. Now create something great!
    |
     */
    Route::pattern('id', '[0-9]+');
    
    Route::get('/', 'ProductController@index')->name('index');
    Route::get('/product', 'ProductController@index')->name('product.index');
    Route::get('/product/{id}', 'ProductController@show')->name('product.show');
    
    Auth::routes();
    
    Route::get('/home', 'HomeController@index')->name('home');
    

     

到GitHub觀看此單元程式異動


:::

書籍目錄

展開 | 闔起

快速登入


http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D1428%26tbsn%3D43

計數器

今天: 769769769
昨天: 8625862586258625
總計: 8031376803137680313768031376803137680313768031376