🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

858閲覧

laravel 詳細画面画面の作成 foreach文 複数形 定義されていない エラー

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/12/29 21:16

前提・実現したいこと

パイザラーニングをしているときに引っかかりました。
詳細画面を作ろうのレッスンです。

foreachをする際は$diaries as $diaryと入力すると、思うのですが、
$diariesが定義されていないと表示されます。
これは複数形だと認識されていないと思いますが、どうなんでしょうか?

全然わかりません。よろしくおねがいします!

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

エラーメッセージ Undefined variable: diaries (View: /home/ubuntu/myblog/resources/views/show.blade.php)

該当のソースコード

<?php namespace App\Http\Controllers; use App\Diary; use Illuminate\Http\Request; class DiaryController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $message = 'Welcome to my page!'; $diaries = Diary::all(); return view('index', ['message' => $message, 'diaries' => $diaries]); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param \App\Diary $diary * @return \Illuminate\Http\Response */ public function show(Request $request, $id ,Diary $diary) { $diary = Diary::find($id); return view('show', ['diary' => $diary]); } /** * Show the form for editing the specified resource. * * @param \App\Diary $diary * @return \Illuminate\Http\Response */ public function edit(Diary $diary) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Diary $diary * @return \Illuminate\Http\Response */ public function update(Request $request, Diary $diary) { // } /** * Remove the specified resource from storage. * * @param \App\Diary $diary * @return \Illuminate\Http\Response */ public function destroy(Diary $diary) { // } }

該当のソースコード

<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::get('/diary', 'DiaryController@index')->name('diary.list'); Route::get('/diary/{id}', 'DiaryController@show')->name('diary.show');

該当のソースコード

<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <title>myblog</title> <style>body {padding: 10px;}</style> </head> <body> <h1>This is myblog page</h1> <p>{{ $diary ->topic }}</p> @foreach($diaries as $diary) <p> <a href='{{ route("diary.show", ["id" => $diary->id]) }}'> {{ $diary->content }} </a> </p> @endforeach <p> <a href={{ route('diary.list') }}>一覧に戻る</a> </p> </body> </html>

該当のソースコード

<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <title>paiza bbs</title> <style>body {padding: 10px;}</style> </head> <body> <h1>myblog Index Page</h1> <p>{{ $message }}</p> <p> <a href={{ route('diary.list') }}>一覧に戻る</a> </p> </body> </html>

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

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

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

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

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

m.ts10806

2020/12/29 21:37

>これは複数形だと認識されていないと思いますが プログラムの変数名に「単語」という概念はないですよ。そういう文字列の集合体。Laravel以前にPHPはちゃんとできるのでしょうか?一定以上の知識技術は必要ですし、この内容で「全くわからない」だと、おそらく何年経っても身につかないのでは。 Laravel以前にやるべきことを飛ばしすぎてませんか?ここでアドバイスを得たところで、本質的な理解は難しいかと思います。
退会済みユーザー

退会済みユーザー

2020/12/30 00:30

php十分に理解せずにやってることが ば、、ばれましたか。 PHPを少しして、Laravelに移行した方が、実践的な経験をつめると感じたので、進めていますが、間違った方法ですかね。。 Laravel以前の前提知識である、phpの基礎理解をどこまでしておけば、よいかと言ったところが、正直わかりません。。 申し訳ありませんが、参考サイトなど、ございましたら、ご教授頂きたいです。。
退会済みユーザー

退会済みユーザー

2020/12/30 00:30

本来の質問とは違う、質問で申し訳ありません。。
m.ts10806

2020/12/30 03:50

出ている現象がLaravel特有かPHP本来のものか見分けがつくくらいには必要です。今回起きてる現象と内容からPHPがまず不十分であると見分けは付きます。 「Web職人のためのフレームワーク」がLaravelのコンセプトです。前提となる知識技術は相当以上に必要です。いざとなったらLaravelのコアソースを確認して仕様を読み解くくらいのことはできたほうがいいですね。ドキュメントの日本語訳も充実していますし。
退会済みユーザー

退会済みユーザー

2020/12/30 05:53

なるほど!larabel特有、php特有のものかがわからないと、エラーのでたところがどちらのエラーかわからないですし、コードの編集もできないとゆうことですかね、、 相当以上に必要。。?その辺りの詳細は自分で調べて進めた方が良いという感じですね、、 コアソースを確認して、仕様を読む。メモメモ。。 丁寧にありがとうございます!
m.ts10806

2020/12/30 06:59

Laravel  です。 コードは書いたとおりにしか動かないので固有名詞の間違いは致命的になります。
m.ts10806

2020/12/30 07:00

「コアソースを確認して」というより「何かあったときにコアソースを読んでいけるくらいの気概がないと太刀打ちできない」というのが正しいです。
退会済みユーザー

退会済みユーザー

2020/12/30 10:40

ご指摘ありがとうございます! なるほど、キータの記事とか見るより、元を辿った方が良いとゆうことですね!
退会済みユーザー

退会済みユーザー

2020/12/30 10:41

とゆうより、元をたどれ!って感じですね!
m.ts10806

2020/12/31 00:13 編集

いえ、違います。 「何かあったときにコアソースを読んでいけるくらいの気概がないと太刀打ちできない」 Qiitaも優良な記事はあるので見るなとは言いませんが、裏取りに公式ドキュメント確認は必須です。 優良かどうか自身で判断できるくらいの知識量も必要です。
退会済みユーザー

退会済みユーザー

2020/12/31 13:38

、、? 勉強不足で申し訳ありませんが、『コアソース』とは、①自身で入力したコード、②公式ドキュメントにあるメソッドの詳細、②で解釈してるのですが、間違ってますよね。どういった意味合いで使っていらっしゃいますか? 優良かどうかを判断できる知識、、、勉強します!!
guest

回答1

0

ベストアンサー

エラーはいつ, どこで, 何が起きてどの様なエラーが起きているか教えてくてます。ここをデバッグする際は一番忘れてはいけないとこです。

Undefined variable: diaries (View: /home/ubuntu/myblog/resources/views/show.blade.php)

日本語でわかりやすい形にすると、

diariesという未定義の変数が(View: /home/ubuntu/myblog/resources/views/show.blade.php)で発生しています。

これでいつ, どこで, 何が起きてどの様なエラーが起きているかが分かりましたね。
Controllerで該当のコードとして1ファイル全てを提示している様ですが、本当に該当しているのは、show.blade.phpを返している関数showだということまで分かります。

PHP

1 public function show(Request $request, $id ,Diary $diary) 2 { 3 $diary = Diary::find($id); 4 return view('show', ['diary' => $diary]); 5 }

あれ。viewでは変数diariesを使用している様ですが、Controllerでは渡していませんね。

ここまで理解できればご自身で一度修正できるかと思います。

余談

  • 仕様を理解していないですが、Controllerの記述を見る限り、show.blade.phpでは1つの記事のみを表示させたいのだと思います。その際は、複数ないのでControllerに合わせた修正でいいと思います。

  • 実はこの回答って答えは言ってないんです。エラーメッセージの解説とどこで起きているかを確認しただけで。つまりエラーメッセージを理解できていなかったことになりますね。逆に言えば、エラーメッセージを理解してしまえば、この問題のデバッグは容易にできます。

投稿2020/12/30 06:24

編集2020/12/30 06:30
kai0310

総合スコア2076

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

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

退会済みユーザー

退会済みユーザー

2020/12/30 10:56

おぉー!凄く丁寧にありがとうございます!泣 前提知識(PHPの基礎)が抜けた状態で、laravelをすると痛い目をみますね。 エラーの見方を十分に理解できていませんでした。。その辺りの学習まず進めます! 最後の一文に、優しさすごく感じます。。しみました。 最後に一つお聞きしたいのですが、 laravel→わからないところが出てきたらその部分だけphpの基礎学習→laravel→....を繰り返して学習しようとしてるのですが、これだと効率が悪いですかね。。ご意見お聞きしたいです。 宜しくお願い致します!!
kai0310

2020/12/30 12:16

LaravelってPHP以外にも必要な知識はあります。SQLやそもそものウェブに関しての知識や。質問者さんがどれだけPHPの理解度があるか分からないのですが、クラスやオブジェクトについて最低限理解してないときついのではないでしょうか。 また、Laravelに限らずフレームワークというものはそのものの言語の一定の理解度は必要なものです。そもそもフレームワークというものは変化が激しいのです。いつサポート・開発が終了して次のフレームワークに乗り換えなければいけないかも分かりません。ただベースのPHPを理解しているのであればあとは他のフレームワークに乗り換えてその作法に従えばいいのでフレームワークに依存しない方がいいと思います。 ( フレームワークに依存しない方がいいという回答があるので参考までにhttps://teratail.com/questions/310736#reply-434484
退会済みユーザー

退会済みユーザー

2020/12/31 13:33

最低限のクラスとオブジェクト、意識して、学習しながら、進めていきます! なるほど、時代の変化によって、フレームワークが変わるから、ベースとなるものの理解が必要。なるほど、必要性を理解していなかったので、勉強になりました!参考のURLもありがとうございました!
kai0310

2021/01/01 06:31

m.ts10806さんのおっしゃる通りにPHPの理解は絶対的に必要になります。早くあるものを作りたいという気持ちも分かりますが、それでは結局遠回りになってしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問