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

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

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

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

PHP

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

Q&A

解決済

1回答

661閲覧

【laravel】画像の読み込みがうまくいかない

yoshioka01

総合スコア21

Laravel

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

PHP

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

0グッド

0クリップ

投稿2021/11/19 06:41

質問

画像を送るとそれを受けとって表示する機能を作成したいのですが、画像のように読み込みがうまくいかない
イメージ説明

やっていること

1.メモ内容[content],画像[image],URL[url]を入力する
2.'/content'で表示する
3.編集するボタンで1の内容を編集することができる(edit.blade.php)(updateメソッド)
4.3で編集した内容を'/content'で表示する

問題:4で表示する画像が????参照画像のようになる

以下、コードを添付いたします

content.blade.php

php

1@extends('layouts.app') 2 3@section('content') 4<div class="row justify-content-center ml-0 mr-0 h-100"> 5 <div class="card w-100"> 6 <div class="card-header">メモの内容</div> 7 <div class="card-body"> 8 {{ $memo['content'] }} 9 10 <br> 11 <img src="{{ '/storage/' . $memo['image']}}" class='w-100 mb-3'> 12 13 <br> 14 15 <!-- URLをaで表示する --> 16 17 <a href ="{{ $memo['url'] }}"> {{ $memo['url']}} </a> 18 19 <br> 20 21 <a href ='/home' class="btn btn-primary btn-lg" style ='width:90px'>戻る</a> 22 </form> 23 </div> 24 </div> 25</div> 26@endsection 27

edit.blade.php

@extends('layouts.app') @section('content') <div class="row justify-content-center ml-0 mr-0 h-100"> <div class="card w-100"> <div class="card-header">メモ編集</div> <form method = 'POST' action = "/delete/{{ $memo['id'] }}" id = 'delete-form'> @csrf <button><i id = 'delete-button' class = "fas fa-trash"></i></button> </form> <div class="card-body"> <form method='POST' action="{{route('update',['id' => $memo['id']] ) }}"> @csrf <input type='hidden' name='user_id' value="{{ $user['id'] }}"> <div class="form-group"> <textarea name='content' class="form-control"rows="10"> {{ $memo['content'] }} </textarea> <div class="form-group"> <form method='POST' action="{{route('update',['id' => $memo['id']] ) }}" enctype="multipart/form-data"> <label for="image">画像のupload</label> <input type="file" class="form-control-file" name='image' id="image"> </div> <!--URLをとってくる--> <div class="mb-3"> <form method='POST' action="{{route('update',['id' => $memo['id']] ) }}"> <label for="disabledTextInput" class="form-label">URLの入力してください</label> <input type="text" id="disabledTextInput" class="form-control" name='url' placeholder="URL"> </div> </div> <div class="form-group"> </div> <button type='submit' class="btn btn-primary btn-lg">更新する</button> </form> </div> </div> </div> @endsection

HomeController.php

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use \App\Memo; 7use \App\User; 8 9 10class HomeController extends Controller 11{ 12 /** 13 * Create a new controller instance. 14 * 15 * @return void 16 */ 17 public function __construct() 18 { 19 $this->middleware('auth'); 20 } 21 22 /** 23 * Show the application dashboard. 24 * 25 * @return \Illuminate\Contracts\Support\Renderable 26 */ 27 public function index() 28 { 29 //↓でログインしているユーザの情報を渡す 30 $user = \Auth::user(); 31 //ここでメモの中身をログインしているアカウントのIDと一致させないといけない 32 $memos = Memo::where('user_id',$user['id'])->where('status',1)->get(); 33 //dd($memos); 34 return view('home',compact('user','memos')); 35 } 36 37 public function memo() 38 { 39 $user = \Auth::user(); 40 41 return view('memo',compact('user')); 42 } 43 44 public function store(Request $request) 45 { 46 $data = $request->all(); 47 //dd($data); 48 $image = $request->file('image'); 49 50 if($request->hasFile('image')){ 51 $path = \Storage::put('/public', $image); 52 $path = explode('/', $path); 53 }else{ 54 $path = null; 55 } 56 // POSTされたデータをDB(memosテーブル)に挿入 57 // MEMOモデルにDBへ保存する命令を出す 58 $memo_id = Memo::insertGetId( 59 ['content' => $data['content'], 60 'user_id' => $data['user_id'], 61 'image' => $path[1], 62 'url' => $data['url'], 63 'status' => 1]); 64 65 // リダイレクト処理 66 return redirect()->route('home'); 67 } 68 69 public function edit($id){ 70 $user = \Auth::user(); 71 72 $memo = Memo::where('status','1')->where('id',$id)->where('user_id',$user['id'])->first(); 73 74 $memos = Memo::where('user_id',$user['id'])->where('status',1)->orderBy('updated_at','DESC')->get(); 75 76 return view ('edit',compact('memo','user','memos')); 77 } 78 79 public function update(Request $request , $id){ 80 $inputs = $request->all(); 81 //dd($inputs); 82 83 Memo::where('id',$id)->update(['content' => $inputs['content'], 84 'image' => $inputs['image'], 85 'url' => $inputs['url'] 86 ]); 87 88 return redirect()->route('home'); 89 } 90 91 public function content($id){ 92 $user = \Auth::user(); 93 $memo = Memo::where('status','1')->where('id',$id)->where('user_id',$user['id'])->first(); 94 95 $memos = Memo::where('user_id',$user['id'])->where('status',1)->orderBy('updated_at','DESC')->get(); 96 97 return view ('content',compact('memo','user','memos')); 98 } 99 100 public function delete(Request $request , $id){ 101 $inputs = $request->all(); 102 //dd($inputs); 103 Memo::where('id',$id)->update([ 'status' => 2 ]); 104 105 return redirect()->route('home')->with('success','メモの削除が完了しました'); 106 } 107 108 109} 110

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

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

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

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

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

yoshioka01

2021/11/20 05:02

php artisan storage:llinkでpublic/storageに画像が入るようにしてあります
m.ts10806

2021/11/20 07:00

でも、その日本語訳ドキュメントにあるようにasset()でアクセスしてないので違うところを指してるのではないでしょうか。 > ファイルを保存し、シンボリックリンクを作成したら、assetヘルパを使用してファイルへのURLを作成できます。
guest

回答1

0

ベストアンサー

$filename = Storage::disk('public')->putFile('images', $image);storage/app/publicに保存する事ができます。

プロジェクトでは/storage/app/publicフォルダーが基準となり、storage:linkした後のファイルはURLでは/storageが基準です。
asset()example.com/(/publicフォルダー)が基準なので、/public/storage/images(既に/storage/app/public/images)にある$filenameイメージはasset('/storage/images/'.$filename)でURLを作成できます。

投稿2021/11/21 04:03

skys215

総合スコア910

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問