:::

12. 讀出單一測驗

  1. 點進去某個測驗,路由是連到 exam/{{$exam->id}},所以,在/routes/web.php新增一筆路由資料
    Route::get('/exam/{id}', 'ExamController@show')->name('exam.show');
  2. 路徑中的 {id} 可以直接在控制器中變成變數$id使用,所以,無須自己帶參數過去。不過路由的參數和控制器的變數是以先後位置來對應的,無關名稱,換言之,控制器中不命名為 $id 也是可以的。
  3. 如果該參數可有可無,那麼可以寫成 {id?} 這樣的方式。
  4. 如果路由有參數,且確定其格式,那麼可以用->where() 限制參數格式(否則exam/create 中的 create 也可能會被當成id),例如:限制id 只允許 0~9 的數字,如此可以降低路由被誤判的機會
    Route::get('/exam/{id}', 'ExamController@show')->name('exam.show')->where('id', '[0-9]+');
  5. 如果同一個參數要限制格式,且有好幾個 Route 要用,則可用 Route::pattern() 方式來統一宣告(記得放最上面):
    Route::pattern('id' , '[0-9]+');
  6. 接著在 /專案/app/Http/Controllers/ExamController.php 控制器中,修改 show 的方法,其中 $id 便是從路由過來的:

    public function show($id)
    {
        $exam = Exam::find($id);
        return view('exam.show', compact('exam'));
    }
  7. find() 是 Eloquent 根據主鍵用來取出該筆資料用的。詳情請看:https://laravel-china.org/docs/laravel/5.6/eloquent/1332#retrieving-single-models

  8. 最後,只要製作好樣板,讓資料顯示出來即可,請建立 /專案/resources/views/exam/show.blade.php

    @extends('layouts.app') 
    @section('content')
        <h1 class="text-center">{{$exam->title}}</h1>
    
        <div class="text-center">
            發佈於 {{$exam->created_at->format("Y年m月d日 H:i:s")}} / 最後更新: {{$exam->updated_at->format("Y年m月d日 H:i:s")}}
        </div>
    @endsection

 

到GitHub觀看此單元程式異動


:::

書籍目錄

展開 | 闔起

快速登入


https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D1175%26tbsn%3D37

計數器

今天: 4087408740874087
昨天: 2489248924892489
總計: 8026069802606980260698026069802606980260698026069