:::
12. 讀出單一測驗
- 點進去某個測驗,路由是連到
exam/{{$exam->id}},所以,在/routes/web.php新增一筆路由資料Route::get('/exam/{id}', 'ExamController@show')->name('exam.show'); - 路徑中的
{id}可以直接在控制器中變成變數$id使用,所以,無須自己帶參數過去。不過路由的參數和控制器的變數是以先後位置來對應的,無關名稱,換言之,控制器中不命名為$id也是可以的。 - 如果該參數可有可無,那麼可以寫成
{id?}這樣的方式。 - 如果路由有參數,且確定其格式,那麼可以用
->where()限制參數格式(否則exam/create中的create也可能會被當成id),例如:限制id 只允許 0~9 的數字,如此可以降低路由被誤判的機會Route::get('/exam/{id}', 'ExamController@show')->name('exam.show')->where('id', '[0-9]+'); - 如果同一個參數要限制格式,且有好幾個 Route 要用,則可用
Route::pattern()方式來統一宣告(記得放最上面):Route::pattern('id' , '[0-9]+'); -
接著在
/專案/app/Http/Controllers/ExamController.php控制器中,修改show的方法,其中$id便是從路由過來的:public function show($id) { $exam = Exam::find($id); return view('exam.show', compact('exam')); } -
find()是 Eloquent 根據主鍵用來取出該筆資料用的。詳情請看:https://laravel-china.org/docs/laravel/5.6/eloquent/1332#retrieving-single-models -
最後,只要製作好樣板,讓資料顯示出來即可,請建立
/專案/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
11-2 加入分頁
