https://www.hypertextcandy.com/laravel-tutorial-error-handling/
こちらのサイトを見てtodoアプリをlaravelで作っています。
こちらのサイトにおける、チュートリアル(9)までは順調にできたのですが、チュートリアル(10)エラーハンドリングでコードを模写したところエラーが出てしまいます。
公開されているgithubからコードをコピペしても解決しません。
以下関係があると思われるコードです。
app/Http/Controllers/TaskController
PHP
1<?php 2 3namespace App\Http\Controllers; 4 5use App\Folder; 6use App\Http\Requests\CreateTask; 7use App\Http\Requests\EditTask; 8use App\Task; 9use Illuminate\Http\Request; 10use Illuminate\Support\Facades\Auth; 11 12class TaskController extends Controller 13{ 14 /** 15 * タスク一覧 16 * @param Folder $folder 17 * @return \Illuminate\View\View 18 */ 19 public function index(Folder $folder) 20 { 21 // ユーザーのフォルダを取得する 22 $folders = Auth::user()->folders()->get(); 23 24 // 選ばれたフォルダに紐づくタスクを取得する 25 $tasks = $folder->tasks()->get(); 26 27 return view('tasks/index', [ 28 'folders' => $folders, 29 'current_folder_id' => $folder->id, 30 'tasks' => $tasks, 31 ]); 32 } 33 34 /** 35 * タスク作成フォーム 36 * @param Folder $folder 37 * @return \Illuminate\View\View 38 */ 39 public function showCreateForm(Folder $folder) 40 { 41 return view('tasks/create', [ 42 'folder_id' => $folder->id, 43 ]); 44 } 45 46 /** 47 * タスク作成 48 * @param Folder $folder 49 * @param CreateTask $request 50 * @return \Illuminate\Http\RedirectResponse 51 */ 52 public function create(Folder $folder, CreateTask $request) 53 { 54 $task = new Task(); 55 $task->title = $request->title; 56 $task->due_date = $request->due_date; 57 58 $folder->tasks()->save($task); 59 60 return redirect()->route('tasks.index', [ 61 'id' => $folder->id, 62 ]); 63 } 64 65 /** 66 * タスク編集フォーム 67 * @param Folder $folder 68 * @param Task $task 69 * @return \Illuminate\View\View 70 */ 71 public function showEditForm(Folder $folder, Task $task) 72 { 73 $this->checkRelation($folder, $task); 74 75 return view('tasks/edit', [ 76 'task' => $task, 77 ]); 78 } 79 80 /** 81 * タスク編集 82 * @param Folder $folder 83 * @param Task $task 84 * @param EditTask $request 85 * @return \Illuminate\Http\RedirectResponse 86 */ 87 public function edit(Folder $folder, Task $task, EditTask $request) 88 { 89 $this->checkRelation($folder, $task); 90 91 $task->title = $request->title; 92 $task->status = $request->status; 93 $task->due_date = $request->due_date; 94 $task->save(); 95 96 return redirect()->route('tasks.index', [ 97 'id' => $task->folder_id, 98 ]); 99 } 100 101 /** 102 * フォルダとタスクの関連性があるか調べる 103 * @param Folder $folder 104 * @param Task $task 105 */ 106 private function checkRelation(Folder $folder, Task $task) 107 { 108 if ($folder->id !== $task->folder_id) { 109 abort(404); 110 } 111 } 112} 113
app/Http/Controllers/HomeController
PHP
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use Illuminate\Support\Facades\Auth; 7 8class HomeController extends Controller 9{ 10 public function index() 11 { 12 // ログインユーザーを取得する 13 $user = Auth::user(); 14 15 // ログインユーザーに紐づくフォルダを一つ取得する 16 $folder = $user->folders()->first(); 17 18 // まだ一つもフォルダを作っていなければホームページをレスポンスする 19 if (is_null($folder)) { 20 return view('home'); 21 } 22 23 // フォルダがあればそのフォルダのタスク一覧にリダイレクトする 24 return redirect()->route('tasks.index', [ 25 'id' => $folder->id, 26 ]); 27 } 28}
routes/web.php
PHP
1<?php 2 3Route::group(['middleware' => 'auth'], function() { 4 Route::get('/', 'HomeController@index')->name('home'); 5 6 Route::get('/folders/create', 'FolderController@showCreateForm')->name('folders.create'); 7 Route::post('/folders/create', 'FolderController@create'); 8 9 Route::group(['middleware' => 'can:view,folder'], function() { 10 Route::get('/folders/{folder}/tasks', 'TaskController@index')->name('tasks.index'); 11 12 Route::get('/folders/{folder}/tasks/create', 'TaskController@showCreateForm')->name('tasks.create'); 13 Route::post('/folders/{folder}/tasks/create', 'TaskController@create'); 14 15 Route::get('/folders/{folder}/tasks/{task}/edit', 'TaskController@showEditForm')->name('tasks.edit'); 16 Route::post('/folders/{folder}/tasks/{task}/edit', 'TaskController@edit'); 17 }); 18}); 19 20Auth::routes(); 21
resources/views/tasks/index.blade.php
PHP
1@extends('layout') 2 3@section('content') 4 <div class="container"> 5 <div class="row"> 6 <div class="col col-md-4"> 7 <nav class="panel panel-default"> 8 <div class="panel-heading">フォルダ</div> 9 <div class="panel-body"> 10 <a href="{{ route('folders.create') }}" class="btn btn-default btn-block"> 11 フォルダを追加する 12 </a> 13 </div> 14 <div class="list-group"> 15 @foreach($folders as $folder) 16 <a href="{{ route('tasks.index', ['id' => $folder->id]) }}" class="list-group-item {{ $current_folder_id === $folder->id ? 'active' : '' }}" > 17 {{ $folder->title }} 18 </a> 19 @endforeach 20 </div> 21 </nav> 22 </div> 23 <div class="column col-md-8"> 24 <div class="panel panel-default"> 25 <div class="panel-heading">タスク</div> 26 <div class="panel-body"> 27 <div class="text-right"> 28 <a href="{{ route('tasks.create', ['id' => $current_folder_id]) }}" class="btn btn-default btn-block"> 29 タスクを追加する 30 </a> 31 </div> 32 </div> 33 <table class="table"> 34 <thead> 35 <tr> 36 <th>タイトル</th> 37 <th>状態</th> 38 <th>期限</th> 39 <th></th> 40 </tr> 41 </thead> 42 <tbody> 43 @foreach($tasks as $task) 44 <tr> 45 <td>{{ $task->title }}</td> 46 <td> 47 <span class="label {{ $task->status_class }}">{{ $task->status_label }}</span> 48 </td> 49 <td>{{ $task->formatted_due_date }}</td> 50 <td> 51 <a href="{{ route('tasks.edit', ['id' => $task->folder_id, 'task_id' => $task->id]) }}"> 52 編集 53 </a> 54 </td> 55 </tr> 56 @endforeach 57 </tbody> 58 </table> 59 </div> 60 </div> 61 </div> 62 </div> 63@endsection
以下がエラーコードになります。
Missing required parameters for [Route: tasks.index] [URI: folders/{folder}/tasks].
![
必要なパラメーターが与えられていないということだと思いますが、なぜサイトではできているのに自分のコードではうまくいかないのかよくわかりません。
公式ドキュメントも読んではみたんですが、具体的にどこを直すべきかわかりませんでした。
どなたかわかる方いたらぜひ教えてください。宜しくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。