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

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

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

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

PHP

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

Q&A

解決済

1回答

2662閲覧

Trying to get property 'id' of non-objectエラー(Laravelにて)

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

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

PHP

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

0グッド

0クリップ

投稿2020/06/08 09:54

よろしくお願いいたします。

Laravelにて@sectionと@yieldを使った親テンプレを継承しての子テンプレへのshowメソッド呼び出しにて上記のエラーが発生しております。

まずは、正常に動作するパターンとエラーが発生するパターンを分けて記述いたします。

【正常に動作する設定】


web.php(ルーティング設定)

html

1Route::get('/','TopsController@index')->name('tops.list'); 2Route::get('/article/{id}','TopsController@show')->name('tops.article');

TopsController.php (コントローラー設定)

html

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

views/article.blade.php (view)

html

1<h1>個別情報</h1> 2 3 <p>{{ $tops->id }}</p> 4 <p>{{ $tops->name }}</p> 5 <p>{{ $tops->job }}</p> 6 <p>{{ $tops->age }}</p>

上記の設定の場合は、正常に動作し、問題なくidに応じた個別データがブラウザに表示されます。

続いて、エラーが発生するパターンです。基本的にControllerとweb.phpの設定は同じなので、
割愛いたします。

【エラーが発生するパターン】


views/common/layout.blade.php (親テンプレ)

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Document</title> 7</head> 8<body> 9 <div> 10 @yield('article') 11 </div> 12</body> 13</html>

views/article.blade.php (子テンプレ)

html

1@extends('common.layout') 2@section('article') 3 <h1>個別情報</h1> 4 5 <p>{{ $tops->id }}</p> 6 <p>{{ $tops->name }}</p> 7 <p>{{ $tops->job }}</p> 8 <p>{{ $tops->age }}</p> 9 10@endsection

上記のパターンで親テンプレから継承しつつ子テンプレをshowメソッドにて呼び出した場合に、エラー文

html

1"Trying to get property 'id' of non-object (View: /Applications/MAMP/htdocs/for-mom/resources/views/common/layout.blade.php) "

が発生してしまいます。

オブジェクト化されていないようなことが書かれておりますが、正常に動作するパターンの際にはメソッド内にnewなどでの実体化などを行っておりませんでしたので、なぜエラーが発生してしまうのかわかりません、、、

アドバイスのほどいただけますと幸いに存じます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

試してみたんですが

"Trying to get property 'id' of non-object (View: /Applications/MAMP/htdocs/for-mom/resources/views/common/layout.blade.php) "
こうにはならなくて、
"Trying to get property 'id' of non-object (View: /Applications/MAMP/htdocs/for-mom/resources/views/common/article.blade.php) "
っていう感じになります(article.blade.phpでエラー出る)

キャッシュかもしれないので、
php artisan view:clear
をしてみるとかかなぁ

投稿2020/06/08 10:40

rururu3

総合スコア5545

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

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

退会済みユーザー

退会済みユーザー

2020/06/08 10:57

ご回答ありがとうございます。 php artisan view:clearを行ってみましたが、どうやら同様のエラー文が発生してしまうようです。 私の記載した情報以外のところでエラーが発生しているのか、、、もう少し調べてみる必要がありそうです。
rururu3

2020/06/08 11:02

laravel6で試したのですが、laravelのバージョンいくつでしょうか?
退会済みユーザー

退会済みユーザー

2020/06/08 11:07

確認いたしました。 現在はLaravel Framework 7.13.0ですね。
rururu3

2020/06/08 14:56

7系でやってみましたが、エラー出した際はarticle.blade.phpで出ますね… views/common/layout.blade.php は記載されているので間違いないですか?&URLは成功するパターンおよび失敗するパターンで同じですか?
退会済みユーザー

退会済みユーザー

2020/06/09 08:43

ご回答ありがとうございます。 はい。現在、layout.blade.phpはviewsのcommonディレクトリに格納されており、親テンプレとして使用しております。 ルーティングも再確認いたしましたが、showメソッドを呼び出すことになっており、article.blade.phpをviewヘルパ関数で呼び出しつつ、テーブルをtops::find($id)で持ってくる設定もしておりますがなぜかうまくいかないですね。。。
退会済みユーザー

退会済みユーザー

2020/06/09 08:43

エラー内容はおっしゃる通り、 Trying to get property 'id' of non-object (View: /Applications/MAMP/htdocs/for-mom/resources/views/common/layout.blade.php) のままですね。
rururu3

2020/06/09 09:12

エラー内容においてlayout.blade.phpの行数って出てると思うんですが、その行にidとか書いてますか? あとLog::infoなどでtops変数の値出してみるとかかなぁ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問