Laravel5.4 でファイルアップロードを試みていますが、エラー処理部分で躓きドキュメントを見ても対処が分かりません。
routes/web.php
Route::get("/about","PagesController@getIndex"); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); Route::get('/', 'UploadController@index'); Route::post('/store', 'UploadController@store');
app/Http/Controllers/UploadController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UploadController extends Controller { public function index(Request $request) { return view('uploads'); } public function store(Request $request) { $this->validate($request, [ 'datafile' => 'image|max:3000', ]); if ($request->file('datafile')->isValid()) { //アップロード成功時の処理 return view('upload_success'); }else{ //失敗時の処理 return view('upload_error'); } } }
resource/view/uploads.blade.php
@if (isset($message)) <div class="alert">{{$message}}</div> @endif <form action="/store" method="post" enctype="multipart/form-data"> <input type="file" name="datafile"> <input type="submit" value="アップロード" /> {{ csrf_field() }} </form> @section('content') <div class="container"> @if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif </div> @endsection
エラー発生
resource/view/upload_error
@section('content') <div class="container"> @if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form action="/store" method="post" enctype="multipart/form-data"> <input type="file" name="datafile"> <input type="submit" value="アップロード" /> {{ csrf_field() }} </form> </div> @endsection
成功時
resource/view/upload_success
@section('content') <div class="container"> <p>アップロードが成功しました。 </div> @endsection
エラー処理時の方法が分からず困っています。
宜しくお願いいたします。
(追記)
できれば、ほかのフレームワークでやっていたようなことができればうれしいんですが、、、、
/store
に遷移した段階でエラーがあればエラーメッセージとファイル選択のフォームを再度表示。
ファイルが送信されていれば、保存ということをしたいです。
公式ドキュメントではこのような内容が読み取れず、できるのか判断出来ない状況です。
ちなみにほかのフレームワークでは
if (エラーあり){
view(エラーのテンプレート);
}else{
view(成功のテンプレート);
}
としていました。
このような仕組みってできるんでしょうか?
宜しくお願いいたします
(追記2)
ご回答内容を反映しました。
(現在の状況)
routes/web.php
Route::get('/', 'UploadController@index'); Route::post('/add', 'UploadController@add');
app/Http/Controllers/UploadController.php
?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UploadController extends Controller { //view public function index() { return view('index'); } //postした後の処理 public function add(Request $request) { $this->validate($request, [ 'file' => 'image|max:3000', ]); if ($request->file('file')->isValid()) { //アップロード成功時の処理 return view('upload_success'); } } }
resource/view/index.blade.php
<!DOCTYPE html> <html> <head> <title>sample</title> <meta charset="utf-8"> </head> <body> <!-- エラーメッセージ表示部分--> @if ($errors->any()) @foreach ($errors->all() as $error) <p>{{ $error }}</p> @endforeach @endif <!-- エラーメッセージ表示部分--> <form action="/add" method="post" enctype="multipart/form-data"> {{ csrf_field() }} <input type="file" name="file"> <input type="submit"> </form> </body> </html>
resource/view/upload_success.blade.php
<!DOCTYPE html> <html> <head> <title>sample</title> <meta charset="utf-8"> </head> <body> <p>アップロード成功しました</p> </body> </html>
回答1件
あなたの回答
tips
プレビュー