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

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

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

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

PHP

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

Laravel 5

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

Q&A

解決済

2回答

2552閲覧

Laravel 5.2 Interventionで画像が保存されない(データベースに画像名は保存されますが、画像自体がPublic下に保存されません。)

spellbound

総合スコア190

Laravel

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

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2016/12/20 21:16

#現状

  • ブログ投稿サイトを開発中。とりわけ、本件はユーザページに関する質問です。
  • 各ユーザがプロフィール文('profile')とサムネイル画像('avatar')を変更することができる機能です。
  • プロフィール文と画像の名前は問題なくデータベースに保存されています。
  • しかし、public/images/avatarsに画像データが保存されません。
  • 特にエラー文は表示されていません。

何日もハマっており、どうしても直せません。
どうかご教示して頂けたら幸いです。
宜しくお願い致します。

PS. もしかしたら、AuthControllerでアップデートアクションを定義するべきなのでしょうか? なぜなら、AuthControllerのcreateアクションでユーザの登録機能を実装しています。会員登録機能がAuthControllerなのにユーザページの編集はUsersControllerを採用しているからおかしいことになっているのでしょうか?

html

1<!-- フォーム(ユーザ編集ページのフォーム) --> 2 3<form method="POST" action="{{ url('users') . '/' . $user->id}}" accept-charset="UTF-8"><input name="_method" type="hidden" value="PATCH" enctype="multipart/form-data"> 4 <input type="hidden" name="_token" value="{{ csrf_token() }}"> 5 <input type="file" name="avatar" value="avatar"> 6 <textarea name="profile" rows="3" value="profile" style="width: 95%; margin-right: auto; margin-left: auto; margin-top: 1.5em;" placeholder="Tell me what kind of person are you...?">{{ $user->profile }}</textarea> 7 <input type="submit" value="update" style="margin: 3em 0 2em 0;"> 8 </form>

php

1// UsersControllerのupdateアクション 2 3public function update(Request $request, $id) { 4 $user = Auth::user()->id; 5 if ($request->hasFile('avatar')) { 6 $image = $request->file('avatar'); 7 $filename = time() . '.' . $image->getClientOriginalExtension(); 8 $path = public_path('images/avatars/' . $filename); 9 Image::make($image->getRealPath())->resize(400, 400)->save($path); 10 } else { 11 User::find($id)->update( 12 array( 13 'avatar' => $request->avatar, 14 'profile' => $request->profile 15 ) 16 ); 17 } 18 return view('users.update', array('user' => Auth::user())); 19 }

php

1// User.php(ユーザのモデル) 2 3<?php 4 5namespace App; 6 7use Illuminate\Foundation\Auth\User as Authenticatable; 8 9class User extends Authenticatable { 10 /** 11 * The attributes that are mass assignable. 12 * 13 * @var array 14 */ 15 protected $fillable = [ 16 'name', 'email', 'password', 'avatar', 'profile' 17 ]; 18 19 /** 20 * The attributes excluded from the model's JSON form. 21 * 22 * @var array 23 */ 24 protected $hidden = [ 25 'password', 'remember_token', 26 ]; 27 public function articles() { 28 return $this->hasMany(Article::class); 29 } 30 public function comments() { 31 return $this->hasMany(Comment::class); 32 } 33}

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

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

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

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

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

guest

回答2

0

motuoさんのご指摘通り、pathが通っていませんでした。
それゆえに、データベースに名前だけ保存され、画像は保存されていませんでした。
結果、エラー文は発生していないが、うまく行っていないという状態になっていました。

また、非常に参考になったユーザ画像のアップデートアクションの実装動画があります。同じように詰まった方は下記の動画を参考にすると解決するかもしれません。
https://devdojo.com/episode/laravel-user-image

投稿2016/12/21 08:31

spellbound

総合スコア190

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

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

0

ベストアンサー

var_dump等で変数の内容を一つずつ確認出来ますか?
$pathは意図通りのフォルダを指していますでしょうか?また、そのフォルダは存在していますか?
$image->getRealPath()で正確にパスを取得できていますか?

P.S以降~の文は特に関係ないと思います。ただ、ソースの内容が若干、気になります。
updateでは、ファイルがアップロードされていればファイルを保管、そうでなければファイル名と本文を更新、というロジックに見えます。業務的にはelseは不要では?と思ってしまいますが。(ファイルをアップロードした時にはその情報が保管されない様に見えますね…)

投稿2016/12/21 01:34

motuo

総合スコア3027

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

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

spellbound

2016/12/21 06:16

ご回答ありがとうございます!用事が終わったので早急に確認してみます。
spellbound

2016/12/21 06:22

if elseを入れた理由は、ユーザページの編集画面で「画像(avatar)」と「プロフィール(profile)」を変更できるようにするためです。if elseを入れないと、「画像(avatar)」を変更せずに「プロフィール(profile)」だけ変更し、アップデート(submit)するとデータベースから画像の名前が消えていました。この点を解決するために条件分岐を行いました。
motuo

2016/12/21 06:27

本筋と関係なので別に良いのですが、、、ソースを見る限りファイルをアップロードしてかつ本文を編集してもその内容が反映されないのかな?と思ったので。 これだと、仮にpublic配下に画像を保存出来たとしてもDBは何も更新されない気がしますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問