Laravel初学者です。
オリジナルアプリを作成しているのでその過程を記事にしています。
理解が曖昧なところも多いため、ご指摘等ありましたらご連絡いただければ幸いです。
今回は
Creating default object from empty value
が出たのでその解決方法を記録として残します。
環境
| Version | |
|---|---|
| PHP | 7.4.14 |
| Laravel | 8.24.0 |
| mysql | 8.0.23 |
| docker | 20.10.2 |
| docker-compose | 1.27.4 |
エラー発生
投稿を保存する機能の実装中に
Creating default object from empty valueとエラーが出ました。
下記が今回の原因のコントローラーです。
public function store(Request $request)
{
$input = $request->only('name', 'describe', 'image_path');
$game = new Game();
$game->name = $input["name"];
$game->describe = $input["describe"];
$image = $request->file('image');
$path = Storage::disk('s3')->putFile('bgama32070', $image, 'public');
$post->image_path = Storage::disk('s3')->url($path);
$game->save();
return redirect('/');
}
おかしなところがありますね。
これに気づかず2時間くらい無駄にしました...
解決方法
こちらの記事を参考にさせていただきました。
ありがとうございます!
今回のエラーである
Creating default object from empty valueは
未定義の変数にプロパティを追加すると発生するのだそうです。
定義していない場所を探して見つけました。
$post->image_path = Storage::disk('s3')->url($path);
上記の部分ですが、その上で$game = new Game();としているのになぜか$postになっています。
これは記述をした際に参考にした記事のまんま何も考えずにコピペしたからこうなっています。
理解できていないのでおきたエラーでした。
$game->image_path = Storage::disk('s3')->url($path);
$gameと直して解決です。
このエラーはスペルミスとか、単数形か複数形かの書き間違いでもよくおきるみたいなので
勉強になりました。