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

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

ただいまの
回答率

90.51%

  • PHP

    23978questions

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

  • Laravel 5

    2520questions

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

  • Laravel

    959questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 960

HayatoIse

score 170

現状

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

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

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

<!-- フォーム(ユーザ編集ページのフォーム) --> 

<form method="POST" action="{{ url('users') . '/' . $user->id}}" accept-charset="UTF-8"><input name="_method" type="hidden" value="PATCH" enctype="multipart/form-data">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <input type="file" name="avatar" value="avatar">
            <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>
            <input type="submit" value="update" style="margin: 3em 0 2em 0;">
        </form>
// UsersControllerのupdateアクション 

public function update(Request $request, $id) {
        $user = Auth::user()->id;
        if ($request->hasFile('avatar')) {
            $image = $request->file('avatar');
            $filename  = time() . '.' . $image->getClientOriginalExtension();
            $path = public_path('images/avatars/' . $filename);
            Image::make($image->getRealPath())->resize(400, 400)->save($path);
        } else {
           User::find($id)->update(
               array(
                 'avatar' => $request->avatar,
                 'profile' => $request->profile
                )
           );
       }
       return view('users.update', array('user' => Auth::user()));
    }
// User.php(ユーザのモデル)

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable {
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'avatar', 'profile'
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    public function articles() {
        return $this->hasMany(Article::class);
    }
    public function comments() {
        return $this->hasMany(Comment::class);
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/21 15:16

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

    キャンセル

  • 2016/12/21 15:22

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

    キャンセル

  • 2016/12/21 15:27

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

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • PHP

    23978questions

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

  • Laravel 5

    2520questions

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

  • Laravel

    959questions

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

  • トップ
  • PHPに関する質問
  • Laravel 5.2 Interventionで画像が保存されない(データベースに画像名は保存されますが、画像自体がPublic下に保存されません。)