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

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

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

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

PHP

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

Q&A

解決済

3回答

5202閲覧

画像投稿機能作成中のCall to a member functionについて

Yachin

総合スコア21

Laravel

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

PHP

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

0グッド

1クリップ

投稿2019/08/27 07:07

編集2019/08/27 07:47

前提・実現したいこと

ラーメン屋投稿アプリを作っおり、画像投稿機能で詰まっています。お店投稿画面'/shop/new'からsubmitすると、エラーがでてしまいますl。おそらくShopController.phpのstoreメソッド内の$fileがnullなためだと思うのですが、これ以上どう対処すればパスがつながるのかわかりません。また、コードにもいまいち自信がありませんので、可能であればご指摘いただけると光栄です。

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

Call to a member function getClientOriginalExtension() on null

該当のソースコード

/Applications/MAMP/htdocs/ramenmap/app/Http/Controllers/ShopController.php

php

1<?php 2 3namespace App\Http\Controllers; 4 5use App\Shop; 6use App\Category; 7use App\SubCategory; 8use App\Pic; 9use Illuminate\Http\Request; 10use Intervention\Image\ImageManagerStatic as Image; 11 12class ShopController extends Controller 13{ 14 public function __construct() 15 { 16 $this->middleware('auth')->except(['index', 'show']); 17 } 18 /** 19 * Display a listing of the resource. 20 * 21 * @return \Illuminate\Http\Response 22 */ 23 public function index() 24 { 25 $shops = Shop::latest()->get(); 26 return view('index', ['shops' => $shops]); 27 } 28 29 /** 30 * Show the form for creating a new resource. 31 * 32 * @return \Illuminate\Http\Response 33 */ 34 public function create(Request $request) 35 { 36 $shop = new Shop(); 37 $shop->name = $request->name; 38 $categories = Category::all()->pluck('name', 'id'); 39 $subcategories = SubCategory::all()->pluck('name', 'id'); 40 $image = Pic::all(); 41 return view('new', ['categories' => $categories, 'subcategories' => $subcategories, 'image' => $image]); 42 } 43 44 /** 45 * Store a newly created resource in storage. 46 * 47 * @param \Illuminate\Http\Request $request 48 * @return \Illuminate\Http\Response 49 */ 50 public function store(Request $request) 51 { 52 $shop = new Shop; 53 $user = \Auth::user(); 54 55 $shop->name = request('name'); 56 $shop->address= request('address'); 57 $shop->category_id = request('category_id'); 58 $shop->subcategory_id = request('subcategory_id'); 59 $shop->user_id = $user->id; 60 $shop->image = request('image'); 61 $shop->save(); 62// dd($shop); 63 // $request->validate([ 64 // 'image'=>'required|image|mimes:jpg,jpeg,png|max:2000' 65 // ]); 66 $file = $request->file('image'); 67// dd($file); 68 $fileName = str_random(20).'.'.$file->getClientOriginalExtension(); 69// dd($filename); 70 Image::make($file)->save(public_path('images/'.$fileName)); 71 $pic=new Pic; 72 $pic->image = $fileName; 73 $pic->save(); 74 75 return redirect()->route('shop.detail', ['id' => $shop->id]); 76 } 77 78 /** 79 * Display the specified resource. 80 * 81 * @param \App\Shop $shop 82 * @return \Illuminate\Http\Response 83 */ 84 public function show($id) 85 { 86 $shop = Shop::find($id); 87 $user = \Auth::user(); 88 if ($user) { 89 $login_user_id = $user->id; 90 } else { 91 $login_user_id = ''; 92 } 93 94 return view('show', ['shop' => $shop, 'login_user_id'=>$login_user_id]); 95 } 96 97 /** 98 * Show the form for editing the specified resource. 99 * 100 * @param \App\Shop $shop 101 * @return \Illuminate\Http\Response 102 */ 103 public function edit(Shop $shop, $id) 104 { 105 $shop = Shop::find($id); 106 $categories = Category::all()->pluck('name', 'id'); 107 $subcategories = SubCategory::all()->pluck('name', 'id'); 108 return view('edit', ['shop' => $shop, 'categories' => $categories, 'subcategories' => $subcategories]); 109 } 110 111 /** 112 * Update the specified resource in storage. 113 * 114 * @param \Illuminate\Http\Request $request 115 * @param \App\Shop $shop 116 * @return \Illuminate\Http\Response 117 */ 118 public function update(Request $request, Shop $shop, $id) 119 { 120 $shop = Shop::find($id); 121 $shop->name = request('name'); 122 $shop->address = request('address'); 123 $shop->category_id = request('category_id'); 124 $shop->subcategory_id = request('subcategory_id'); 125 $shop->save(); 126 return redirect()->route('shop.detail', ['id' => $shop->id]); 127 } 128 129 /** 130 * Remove the specified resource from storage. 131 * 132 * @param \App\Shop $shop 133 * @return \Illuminate\Http\Response 134 */ 135 public function destroy($id) 136 { 137 $shop = Shop::find($id); 138 $shop = destroy(); 139 return redirect('/shops'); 140 } 141} 142

/Applications/MAMP/htdocs/ramenmap/resources/views/new.blade.php

@extends('layout') @section('content') <h3>お店投稿</h3><br> {{ Form::open(['method' =>'post', 'url' => '/shop', 'files' => true]) }} <div class="form-group"> {{ Form::label('name', '店名') }} {{ Form::text('name', null) }} </div> <div class="form-group"> {{ Form::label('address', '住所') }} {{ Form::text('address', null) }} </div> <div class="form-group"> {{ Form::label('category_id', 'カテゴリ') }} {{ Form::select('category_id', $categories, '選択してくだい') }} </div> <div class="form-group"> {{ Form::label('subcategory_id','サブカテゴリ') }} {{ Form::select('subcategory_id', $subcategories, '選択してください') }} </div> <div class="form-group"> {{ Form::file('image', null) }} </div> <div class="form-submit"> <button type="submit">投稿する</button> </div> </div> </form> {{ Form::close() }} <div> <a href="{{ route('shop.list') }}">一覧に戻る</a> </div> @endsection

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

PHP 7.1.23
Laravel Framework 5.7.28

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

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

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

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

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

guest

回答3

0

ベストアンサー

php

1{{ Form::open(['method' =>'post', 'url' => '/shop']) }}

php

1{{ Form::open(['method' =>'post', 'url' => '/shop', 'files' => true]) }}

https://github.com/LaravelCollective/docs/blob/5.6/html.md#opening-a-form

投稿2019/08/27 07:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Yachin

2019/08/27 07:35

ありがとございます、しかし{{Form::open}}に('files' => true)を入れましたがかわらずでした。
退会済みユーザー

退会済みユーザー

2019/08/27 07:37 編集

変わらずと言いながら、エラーメッセージに変化があるのに気づかない初心者さんが多いので、その度にエラーは提示する方が良いと思いますよ。、
Yachin

2019/08/27 07:51

念の為以下でした。new.blade.phpファイルも編集し直しました。 Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR) Call to a member function getClientOriginalExtension() on null
m.ts10806

2019/08/27 08:26

実行前にブラウザ「ソースを表示」でちゃんとenctypeが入っているか確かめてみては。 結局のところfileが送信されてないことが原因なので、enctype入っているか確かめないまま送信確認しても結果は変わらないと思います。
m.ts10806

2019/08/27 08:27

もしかしたらviewがわのキャッシュクリアが必要かもしれませんし。
Yachin

2019/08/27 10:09

ずばりおっしゃる通り、ソースの確認後にviewのキャッシュ削除でなおりました! 玄人のご知見どうもありがとうございました。
guest

0

formにenctype= multipart/form-dataを入れておかないとファイル送信は行えません。

投稿2019/08/27 07:16

m.ts10806

総合スコア80731

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

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

0

enctypeが無さそうなのでそれが原因かと

投稿2019/08/27 07:11

mikkame

総合スコア5036

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

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

m.ts10806

2019/08/27 07:16

すみません。被りました。
Yachin

2019/08/27 07:32

ありがとございます、しかし{{Form::open}}に('files' => true)を入れましたがかわらずでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問