質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5195閲覧

laravel バインディングについて

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/02/08 13:57

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].
![イメージ説明

必要なパラメーターが与えられていないということだと思いますが、なぜサイトではできているのに自分のコードではうまくいかないのかよくわかりません。
公式ドキュメントも読んではみたんですが、具体的にどこを直すべきかわかりませんでした。
どなたかわかる方いたらぜひ教えてください。宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Route::get('/folders/{folder}/tasks', 'TaskController@index')->name('tasks.index');
return redirect()->route('tasks.index', [ 'id' => $folder->id, ]);

{folder}がroute()のパラメータに対応してるのでidが間違い。
5.8まではこれでも動いてたけど6.0で修正された。
ルートURLジェネレータと追加のパラメータ
影響度書いてないけど意外と影響が大きくぶっ壊れる。
https://readouble.com/laravel/6.x/ja/upgrade.html

実のところkeyの指定は不要でこのくらい省略してもたぶん動く。

return redirect()->route('tasks.index', [$folder->id]);
return redirect()->route('tasks.index', $folder->id);

投稿2020/02/08 15:21

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

サイトの記述及びGitHubのソースが間違っています
redirect()->route()の第二引数の配列には、Route::getの第一引数に{}で括って記述したものをキーに、設定したい値をバリューにしたものを設定します
ですので配列のキーをidではなくfolderにします

投稿2020/02/08 14:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問