ここに質問の内容を詳しく書いてください。
ajaxを使用して下記内容のフォームデータをPOSTでリクエストして画像アップロードをしようとした際$request['thumbnail']を渡してアップロード 処理をしようとしたら「Cannot use object of type Illuminate\Http\UploadedFile as array 」が出ていましたので、$request['thumbnail']の中身をログにだして確認したら/tmp/phpc9NVL」が取れます。
$requestのときは以下ログの内容が出ているのですが、なぜ$request['thumbnail']では「 'thumbnail' =>
Illuminate\Http\UploadedFile::__set_state(array〜」をとれないのでしょうか。
ソースに関して不足情報がありましたらおっしゃってください。
log
1// $request['thumbnail']のとき 2local.INFO: /tmp/phpc9NVL 3 4// $requestのとき 5local.INFO: array ( 6 'thumbnail' => 7 Illuminate\Http\UploadedFile::__set_state(array( 8 'test' => false, 9 'originalName' => 'test.jpeg', 10 'mimeType' => 'image/jpeg', 11 'error' => 0, 12 'hashName' => NULL, 13 )), 14 'title' => NULL, 15 ), 16)
実現したいこと
「/tmp/phpc9NVLI 」ではなく「'thumbnail' =>Illuminate\Http\UploadedFile::__set_state(array(〜」をとりたい
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
php
1 /** 2 * 下書きの保存画面 3 * @param Request $request 4 * @return \Illuminate\Contracts\Support\Renderable 5 */ 6 public function draft(Request $request) 7 { 8 $planService = new Plan\Insert(); 9 $validator = $planService->draftValidate($request); 10 $data = []; 11 if ($validator->fails()) { 12 $data['error'] = $validator->errors(); 13 return $data; 14 } 15 if (isset($request['thumbnail'])) { 16 $request['thumbnail_path'] = $planService->uploadThumbnail($request['thumbnail']); 17 } 18 return; 19 }
js
1// 確認画面遷移 2 $('#spot_draft_btn').click(function(){ 3 // バリデーションチェック 4 let formData = check(DRAFT); 5 if (formData['error'].length > 0) { 6 return; 7 } 8 9 $.ajax({ 10 type: "post", 11 url: "/plan/save-draft", 12 headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, 13 data: formData['form'], 14 dataType : "json", 15 processData: false, 16 contentType: false 17 }) 18 // Ajaxリクエストが成功した場合 19 .done(function(data){ 20 console.log(data); 21 }) 22 // Ajaxリクエストが失敗した場合 23 .fail(function(XMLHttpRequest, textStatus, errorThrown){ 24 alert('下書き保存に失敗しました。'); 25 }); 26 }); 27 28/** 29 * フォームデータ生成 30 * @param string flag 31 * @return array 32 */ 33function check(flag) { 34data = {'form': new FormData(), 'error' : {}}; 35 // thumbnailのフォームデータ格納 36 let thumbnail = document.getElementById('thumbnail'); 37 data['form'].append('thumbnail', ""); 38 if ($(thumbnail).val() != "") { 39 data['form'].append('thumbnail', $(thumbnail)[0].files[0]); 40 } 41// titleのバリデーションチェック 42 let title = document.getElementById('title'); 43 let error_title = document.getElementsByClassName('error_title'); 44 data['error'] = {'title' : ''}; 45 if ($(title).val() == "" && CONFIRM == flag) { 46 data['error']['title'] = 'タイトルが未入力です。'; 47 $(error_title).css('display', 'block').text(data['error']['title']); 48 } else if($(title).val().length > 100) { 49 data['error']['title'] = 'タイトルには100文字以内で入力てください。'; 50 $(error_title).css('display', 'block').text(data['error']['title']); 51 } 52 data['form'].append('title', ""); 53 // titleのフォームデータ格納 54 if (data['error']['title'] != "") { 55 $(error_title).css('display', 'block').text(data['error']['title']); 56 } else { 57 $(error_title).css('display', 'none'); 58 // XSS対策 59 data['form'].append('title', escapeHTML($(title).val())); 60 } 61return data; 62}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。