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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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回答

1330閲覧

Laravelで画像のアップロード方法がわからない

y_ymo10

総合スコア16

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クリップ

投稿2019/05/30 03:03

Laravelで画像をアップロードしたいのですが、アップロード方法がわかりません。
ウェブを色々見てきましたが、アップロードする方法が全くわかりません。

PHP

1 $filename = $req->file->store('public');

↑上の関数の意味もできたら教えていただきたいです。

HomeController.php

PHP

1namespace App\Http\Controllers; 2use Illuminate\Support\Facades\Auth; 3use App\Http\Controllers\DB; 4use Illuminate\Http\Request; 5use App\Post; 6class HomeController extends Controller 7{ 8 /** 9 * Create a new controller instance. 10 * 11 * @return void 12 */ 13 public function __construct() 14 { 15 $this->middleware('auth'); 16 } 17 18 /** 19 * Show the application dashboard. 20 * 21 * @return \Illuminate\Contracts\Support\Renderable 22 */ 23 public function index() 24 { 25 $vals = Post::latest()->get(); 26 return view('home',['val'=>$vals]); 27 } 28 29 public function getpost(Request $req){ 30 31 } 32 33 public function editevent(){ 34 $vals = Post::where('type','event')->latest()->get(); 35 return view('edit.event',['val'=>$vals]); 36 37 } 38 public function editedit($id){ 39 40 } 41 42 public function posting(){ 43 return view('msg.create'); 44 } 45 46 public function getnewPost(Request $req){ 47 $post = new Post(); 48 $this->validate($req,[ 49 'title'=>"required", 50 'text'=>"required|min:3", 51 'type'=>"required", 52 'file'=>"required|image" 53 ]); 54 if($req->hasFile('file')){ 55 if ($req->file('file')->isValid()) { 56 $filename = $req->file->store('public'); 57 $post->file=$filename; 58 $post->title=$req->title; 59 $post->body=$req->text; 60 $post->type=$req->type; 61 62 $post->save(); 63 }else{ 64 return redirect() 65 ->back() 66 ->withInput() 67 ->withErrors(); 68 } 69 70 }else{ 71 echo "file not found"; 72 } 73}

create.blade.php

PHP

1@extends('layouts.app') 2 3@section('content') 4<div class="container"> 5<div class="card text-white bg-dark mb-11" > 6 <div class="card-header">お知らせの編集</div> 7 <div class="card-body"> 8 <h5 class="card-title"></h5> 9 <p class="card-text"> 10 <div class="row justify-content-center" style="margin-bottom:5px;"> 11 <div class="col-md-11 text-dark"> 12 <div class="card"> 13 <div class="card-header">新規投稿</div> 14 15 <div class="card-body"> 16 <form action="{{url('/get/newpost')}}" method="post"> 17 <div class="form-group"> 18 <label for="exampleInputEmail1">タイトル</label> 19 <input type="text" class="form-control" id="exampleInputEmail1" name="title" aria-describedby="emailHelp" placeholder="タイトル"> 20 <small id="emailHelp" class="form-text text-muted"></small> 21 </div> 22 <div class="form-group"> 23 <label for="inputState">カテゴリ</label> 24 <select id="inputState" class="form-control" name="type"> 25 <option selected value="event">イベント</option> 26 <option value="calendar">休業日</option> 27 <option value="other">その他</option> 28 </select> 29 </div> 30 <div class="form-group"> 31 <label for="exampleFormControlFile1">画像選択</label> 32 <input type="file" class="form-control-file" id="exampleFormControlFile1" name="file"> 33 </div> 34 <div class="form-group"> 35 <label for="exampleFormControlTextarea1">本文</label> 36 <textarea class="form-control" id="exampleFormControlTextarea1" rows="10" name="text"></textarea> 37 </div> 38 39 <button type="submit" class="btn btn-primary">投稿する</button> 40 {{csrf_field()}} 41</form> 42 </div> 43 </div> 44 </div> 45 </div> 46 </p><!--Dark card end--> 47 </div> 48 49</div> 50@endsection

form概要

カテゴリnameType
タイトルtitletext
カテゴリtypeselect
画像選択filefile
本文texttextarea

その他

command

1$ php artisan storage:link

上記のコマンドは実行済みです。

プログラムの流れ

プログラムの流れは、

入力ページ(create.blade.php)

データ受付(HomeController.php[getnewPost()]

流れ的には確認画面無しでアップロードしたいと考えています。

Laravel初心者ですがよろしくお願いいたします。

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

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

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

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

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

m.ts10806

2019/05/30 03:10

わからないはいいとして現状のコードで起きている現象や問題は何でしょう? 公式の日本語訳サイトをマニュアルとして組み込めばそこまで苦労はなさそうに思いますが…
y_ymo10

2019/05/30 05:11

すみません、エラー発生時に表示されるページが表示されないため、どのようなエラーが出ているかわからない状態です。
y_ymo10

2019/05/30 05:42 編集

バリデーションのメッセージで、「The file must be an image.」と出ていました
m.ts10806

2019/05/30 05:46

>エラー発生時に表示されるページが表示されないため デバッグモードですかね・・。設定確認してください。 ただ、PHPのエラーであればエラーログ等でているはずなので、そちらも確認してください。 >バリデーションのメッセージ それはあくまで開発側が感知しているものなので「エラー」ではなさそうですね。ただ、メッセージからすると画像以外を指定したのでしょうか。
m.ts10806

2019/05/30 05:52

回答に追記しているのでご確認ください。
guest

回答2

0

ベストアンサー

公式の日本語訳サイトのファイルストレージの説明を熟読すると良いかと。

ファイルのアップロードについても触れられています。※いきなりここだけ見ないように。流れや仕組みを理解する必要があります

上の関数の意味

も書いてありますね

そのまま引用:

デフォルトでstoreメソッドは、一意のIDをファイル名として生成します。ファイルの拡張子は、MIMEタイプの検査により決まります。storeメソッドからファイルパスが返されますので、生成されたファイル名を含めた、そのファイルパスをデータベースに保存できます。

ただ$req->file->store('public')ではなく$req->file('file')->store('public')のように思うのですが如何でしょうか。

Laravelのファイルアップロードに関する質問は幾つかあるのでそちらも参考にしてみてください。

あと、PHPに限らず影響があるのですが、ファイル送信したい場合にformタグにつけべきおまじないがついていません。

enctype="multipart/form-data"

投稿2019/05/30 03:41

編集2019/05/30 05:47
m.ts10806

総合スコア80850

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

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

y_ymo10

2019/05/31 01:24

mts10806さん対応ありがとうございました。 おそらく、 enctype="multipart/form-data"の追記と、コントローラのバリデーションに問題があったようです。
m.ts10806

2019/05/31 01:24

はい。enctypeは絶対必要なものですね。 解決されたようで何よりです。
guest

0

Laravelで開発するためには、PHPの知識が最低限必要です。
例として学習にはプレミアム登録が必要ですが、以下のドットインストールは動画でわかりやすく説明してくれているのでおすすめです。
PHPで画像アップロード掲示板を作ろう

まずは、

  • PHPでの$_FILESによるファイルの扱い方
  • formタグのfileの扱い方

シンプルな参考 PHP Labo ファイルのアップロード

あたりを技術取得してから挑んでみてください。

投稿2019/05/30 04:58

編集2019/05/30 04:59
aro10

総合スコア4106

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

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

y_ymo10

2019/05/30 05:08

$_FILESでのファイルの投稿方法については理解していますが、Laravelでの投稿方法がわかりません。 Laravelでの投稿までの設定などを教えていただければ幸いです。
aro10

2019/05/30 05:32

mtsさんの内容がまとまっているかと思うので、一度目を通して見てください????
y_ymo10

2019/05/31 01:24

aro10さん、対応ありがとうございました。解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問