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

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

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

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1588閲覧

Class not foundのエラーが解決できません。

Eltk

総合スコア51

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2019/03/27 07:59

編集2019/03/27 08:22

こんにちは。
PHP(Laravel)初心者です。
以下のことで困っております。
どなたか、ご教授いただければと思い、投稿させていただきました。
どうぞよろしくお願いいたします。

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
「Laravelを使って簡単なアプリを作ってみよう」という講座を購入して、自作中なのですが、
以下のようなエラーが発生してしまい困っております。

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

ErrorException (E_ERROR) Class 'App\Card' not found (View: /Users/takumi/Desktop/trellolike_app/resources/views/listing/index.blade.php)

該当のソースコード

PHP(Laravel) index.blade.phpのコード @extends('layouts.app') @section('content') <div class="topPage"> <div class="listWrapper"> @foreach ($listings as $listing) <div class="list"> <div class="list_header"> <h2 class="list_header_title">{{ $listing->title }}</h2> <div class="list_header_action"> <a onclick="return confirm('{{ $listing->title }}を削除して大丈夫ですか?')" href="{{ url('/listingsdelete', $listing->id) }}"><i class="fas fa-trash"></i></a> <a href="{{ url('/listingsedit', $listing->id) }}"><i class="fas fa-pen"></i></a> </div> </div> <!-- ここから追加 --> <!-- カード表示部分 --> <div class="cardWrapper"> @foreach ($listing->cards as $card) <a class="cardDetail_link" href="/listing/{{$listing->id}}/card/{{$card->id}}"> <div class="card"> <h3 class="card_title">{{ $card->title }}</h3> <div class="card_detail is-exist"><i class="fas fa-bars"></i></div> </div> </a> @endforeach <div class="addCard"> <i class="far fa-plus-square"></i> <a class="addCard_link" href="/listing/{{$listing->id}}/card/new">さらにカードを追加</a> </div> </div> <!-- カード表示部分 --> <!-- ここまで追加 --> </div> @endforeach </div> </div> @endsection 2.Listing.phpのコード <?php namespace App; use Illuminate\Database\Eloquent\Model; class Listing extends Model { public function cards() { return $this->hasMany('App\Card'); } }

試したこと

Appディレクトリの中に、Cardディレクトリ(もしくはCardファイル?)が存在しないからエラーが出ているのかなと考えています。
事実、Appディレクトリの中に、cardディレクトリやcard.phpのようなファイルはございませんでした。
App配下にCard〜のようなディレクトリやファイルを作るような指示や表現はなく、行き詰まってしまいました。

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

phpバージョン:PHP 7.1.23
Laravelバージョン:Laravel Framework 5.5.45

参考資料(エラー文とエラーが起こっているファイルの作成を指示された箇所)

イメージ説明

イメージ説明

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

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

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

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

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

m.ts10806

2019/03/27 08:03

コードは画像ではなくテキストベースでマークダウンの<code>機能を利用してご提示ください。画像ですとコピペできず正しく再現確認できませんし、例えば全角スペースなど入っていても気づけません。 また、初心者アイコンを利用し、なるべく質問内は要件を書くことだけに注力してください。
m.ts10806

2019/03/27 08:04

エラーの意味自体は問題ないですか? エラー内容からするとviewファイルのコードも必要に思います。
m.ts10806

2019/03/27 08:09

念のため、LaravelのバージョンとPHPのバージョンをマイナーバージョンも含めて質問本文に追記してください
Eltk

2019/03/27 08:17

失礼いたしました。修正いたしました。 エラーの意味ですが、 「Appディレクトリの中にCardというディレクトリかファイルがない」という意味だと認識しておりますが、間違っておりますでしょうか。 すみません。「viewファイルのコードも必要になる」という意味が(どうしてなのか、どのファイルが必要なのか)わかっておりません。
m.ts10806

2019/03/27 08:19 編集

前半は回答に起こしますが、エラー自体は「index.blade.php」で起きているわけですよね。エラーメッセージに書いてある通り。 であれば、エラーが起きているコードのソースも必要です。 >Users/takumi/Desktop/trellolike_app/resources/views/listing/index.blade.php
Eltk

2019/03/27 08:23

おっしゃられている意味が今やっとわかりました。 大変失礼しました。 該当コードを追記いたしましたので、またご確認よろしくお願いいたします。
guest

回答1

0

ベストアンサー

Laravelの前にオブジェクト指向(クラスの基礎)と、namespace(名前空間)の考え方を学習する必要があります。

エラーとなっている箇所の「App\Card」だけにフォーカスがあたっているようですが、それをhasMany()で呼び出していることに注目すべきと思います。

  • [

Laravel 5.5 Eloquent:リレーション━1対多](https://readouble.com/laravel/5.5/ja/eloquent-relationships.html#one-to-many)

「リレーション」と聞いてピンと来ますでしょうか?
もしピンとこないのでしたらデータベースの基礎も学ぶ必要があります。


が、理解できた前提で話を進めると。

Appディレクトリの中に、Cardディレクトリ(もしくはCardファイル?)が存在しないからエラーが出ているのかなと考えています。

違います。
名前空間上 Appとなっているだけで、実際は{Laravelプロジェクトフォルダ}/appからのパスを参照することになるはずです。
composerを利用されているのでしたらcomposer.jsonのautoload.psr-4を見てみると良いです。
"App\": "app/"とあります。
これはappフォルダをnamespaceのAppと名づけるよという指定です。

また、エラーはClass 'App\Card' not foundとありますね。
これはnamespace App配下のCardというクラスが見つからないよというエラーになります。
※このあたりはオートローダーの仕組みや概念も踏まえて覚える必要があります

これらを併せるとapp/ディレクトリ配下にCard.phpおよびCardクラスがないということになります
(クラス名とファイル名は同じであるのが基本的なルールです)

今回はListing モデルからCardモデルにリレーションが貼られる様に作られているようなので、リレーションを貼ったモデルはちゃんと作りましょう。
ということですね。

投稿2019/03/27 08:32

m.ts10806

総合スコア80850

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

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

m.ts10806

2019/03/27 08:38

余談。 app配下に直で作ってしまうとシステムが大きくなってきたときにゴチャゴチャになってくるのでmodelディレクトリとか作ってそこに作った方が良いです。その場合はnamespaceの参照先も変わるのでご注意を。
Eltk

2019/03/27 09:02

詳しく教えてくださってありがとうございました。 Railsは少し学んでおりましたので、オブジェクト指向や1対多の関係のアソシエーション(リレーション)基本はなんとなくわかりました。名前空間のみ、あまり理解しておらず、記事を読ませていただきました。 教えてくださった内容を確認し、自身がCardモデルを作る指示箇所を実行し忘れていることに気づけました。 エラーも直り、意図する挙動になりました! どうもありがとうございましたm(_ _)m
m.ts10806

2019/03/27 09:12

なるほど。別言語とはいえフレームワーク経験ありなら馴染みがないわけではなさそうですね。 逆に私はRails経験ないので詳しいことはわかりませんが、phpはエラーメッセージが親切なので結構そのまま何が悪いか教えてくれます。 そこから辿れることも多いですし、あとはphpマニュアルとLaravelリファレンスをきちんと確認して組んでいってください。 書籍のみでは動作させることが主目的で仕様まで見れないと思いますので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問