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

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

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

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

PHP

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

Q&A

解決済

1回答

2280閲覧

Laravel ToDoアプリチュートリアルで Unexpected data found. Data missing

Gento

総合スコア77

Laravel

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

PHP

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

0グッド

0クリップ

投稿2020/09/17 01:49

編集2020/09/17 02:00

前提・実現したいこと

Laravelの入門にちょうど良さそうな以下のチュートリアルを現在やっています。
https://www.hypertextcandy.com/laravel-tutorial-create-task

発生している問題・エラーメッセージ

チュートリアル通りに進めてもエラーが発生して進めなくなりました。。。
上記リンクの**「タスクを保存する」**の段階でこのようなエラーが発生しました。

Carbon\Exceptions\InvalidFormatException Unexpected data found. Unexpected data found. Data missing (View: /Users/xxx/resources/views/tasks/index.blade.php)

該当のソースコード

resources/views/tasks/index.blade.php

html

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 17 href="{{ route('tasks.index', ['id' => $folder->id]) }}" 18 class="list-group-item {{ $current_folder_id === $folder->id ? 'active' : '' }}" 19 > 20 {{ $folder->title }} 21 </a> 22 @endforeach 23 </div> 24 </nav> 25 </div> 26 <div class="column col-md-8"> 27 <div class="panel panel-default"> 28 <div class="panel-heading">タスク</div> 29 <div class="panel-body"> 30 <div class="text-right"> 31 <a href="{{ route('tasks.create', ['id' => $current_folder_id]) }}" class="btn btn-default btn-block"> 32 タスクを追加する 33 </a> 34 </div> 35 </div> 36 <table class="table"> 37 <thead> 38 <tr> 39 <th>タイトル</th> 40 <th>状態</th> 41 <th>期限</th> 42 <th></th> 43 </tr> 44 </thead> 45 <tbody> 46 @foreach($tasks as $task) 47 <tr> 48 <td>{{ $task->title }}</td> 49 <td> 50 <span class="label {{ $task->status_class }}">{{ $task->status_label }}</span> 51 </td> 52 <td>{{ $task->formatted_due_date }}</td> 53 <td><a href="#">編集</a></td> 54 </tr> 55 @endforeach 56 </tbody> 57 </table> 58 </div> 59 </div> 60 </div> 61 </div> 62@endsection

TaskController.php

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Http\Requests\CreateTask; 7use App\Folder; 8use App\Task; 9 10 11class TaskController extends Controller 12{ 13 public function index(int $id) 14 { 15 // Folder モデルの all クラスメソッドですべてのフォルダデータをデータベースから取得 16 $folders = Folder::all(); 17 18 // 選ばれたフォルダを取得する 19 $current_folder = Folder::find($id); 20 21 // 選ばれたフォルダに紐づくタスクを取得する 22 $tasks = $current_folder->tasks()->get(); 23 24 // dd($folders); 25 return view('tasks/index', [ 26 // 「$folders」や「$tasks」がbladeで使われる 27 'folders' => $folders, 28 'current_folder_id' => $current_folder->id, 29 'tasks' => $tasks, 30 ]); 31 } 32 33 /** 34 * GET /folders/{id}/tasks/create 35 */ 36 public function showCreateForm(int $id) 37 { 38 return view('tasks/create', [ 39 'folder_id' => $id 40 ]); 41 } 42 43 public function create(int $id, CreateTask $request) 44 { 45 $current_folder = Folder::find($id); 46 47 $task = new Task(); 48 $task->title = $request->title; 49 dd($request->due_date); 50 $task->due_date = $request->due_date; 51 52 $current_folder->tasks()->save($task); 53 54 return redirect()->route('tasks.index', [ 55 'id' => $current_folder->id, 56 ]); 57 } 58}

Task.php

php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6use Carbon\Carbon; 7 8class Task extends Model 9{ 10 /** 11 * 状態定義 12 */ 13 const STATUS = [ 14 1 => [ 'label' => '未着手', 'class' => 'label-danger' ], 15 2 => [ 'label' => '着手中', 'class' => 'label-info' ], 16 3 => [ 'label' => '完了', 'class' => '' ], 17 ]; 18 19 /** 20 * 状態のラベル 21 * @return string 22 */ 23 public function getStatusLabelAttribute() 24 { 25 // 状態値 26 $status = $this->attributes['status']; 27 28 // 定義されていなければ空文字を返す 29 if (!isset(self::STATUS[$status])) { 30 return ''; 31 } 32 33 return self::STATUS[$status]['label']; 34 } 35 36 /** 37 * 整形した期限日 38 * @return string 39 */ 40 public function getFormattedDueDateAttribute() 41 { 42 return Carbon::createFromFormat('Y-m-d H:i:s', $this->attributes['due_date']) 43 ->format('Y/m/d'); 44 } 45}

###試した事
TaskController.phpでddを使って取得している内容を確認してみました。

dd($request->due_date); dd($task->due_date);では以下のような状態で取得できています。

"2020/09/30"

補足情報(FW/ツールのバージョンなど)

チュートリアルではLaravelのバージョンは5系らしいのですが、私はv6です。
やはりこのバージョンの違いが関係してるのでしょうか?

php artisan --version Laravel Framework 6.18.40

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

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

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

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

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

guest

回答1

0

自己解決

解決しました。。。
https://qiita.com/koukonko/items/420a95e6e98915b8a38b
上記を参考にTaskController.phpを編集したところ、正常に保存されて表示できました。

php

1//変更前 2 $task->due_date = $request->due_date; 3//変更後 4 $task->due_date = $request->due_date = date('Y-m-d H:i:s');

php

1 /** 2 * GET /folders/{id}/tasks/create 3 */ 4 public function showCreateForm(int $id) 5 { 6 return view('tasks/create', [ 7 'folder_id' => $id 8 ]); 9 } 10 11 public function create(int $id, CreateTask $request) 12 { 13 $current_folder = Folder::find($id); 14 15 $task = new Task(); 16 $task->title = $request->title; 17 // date('Y-m-d H:i:s')を追加! 18 $task->due_date = $request->due_date = date('Y-m-d H:i:s'); 19 20 $current_folder->tasks()->save($task); 21 22 return redirect()->route('tasks.index', [ 23 'id' => $current_folder->id, 24 ]);

Task.phpでは以下のようなフォーマットにしているため、それに合わせる必要があったようです。。

php

1public function getFormattedDueDateAttribute() 2 { 3 // 'Y-m-d H:i:s'に合わせる 4 return Carbon::createFromFormat('Y-m-d H:i:s', $this->attributes['due_date']) 5 ->format('Y/m/d'); 6 }

投稿2020/09/17 02:11

Gento

総合スコア77

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問