やりたいこと
action_add()でajaxで送信したデータを
action_index()で$piy_post->save();した時にコメントと一緒に保存できるようにしたい。
現在
ファイル送信フォームにてファイルを送信されたらajaxにアップロードしできているのですが
コメントを入力して送信ボタンを押すとコメントは保存できるのですが画像を保存することができません。
先にaction_add()で保存したファイルデータを
action_index()で$piy_post->save();した時に保存できるようにはどうすれば実装可能でしょうか?
JSは回答に記載させていただきました。
HTML
1index.php 2<section> 3 <?php echo Form::open(array('enctype' => 'multipart/form-data')) ?> 4 <div class="form"> 5 <table> 6 <tr> 7 <th>コメント<span class="form_require">*</span></th> 8 <td> 9 <?php echo Form::textarea("body",$piy_post->body,array("class" => "textarea-middle"))?> 10 </td> 11 </tr> 12 13 <tr> 14 <th colspan="2" class="btn_th"><input type="submit" name="submit" value="投稿" class="submit_button" onclick="return check_hope_date()"></th> 15 </tr> 16 </table> 17 </div> 18 <?php echo Form::hidden("mode", "do") ?> 19 <?php echo Form::close() ?> 20 21 22 <div class="container clearfix"> 23 <div class="row"> 24 <div class="col-md-12"> 25 <p>画像ファイルを選択してください(複数可)</p> 26 </div> 27 </div> 28 <div class="row"> 29 <div class="col-xs-2"> 30 <span class="fileUpload btn btn-default"> 31 ファイルを選択 32 <input type="file" class="uploadFile" accept="image/*" multiple/> 33 </span> 34 </div> 35 </div> 36 <hr /> 37 <div class="row"> 38 <div class="col-md-12" id="image-files"> 39 <ul class="list-inline list-unstyled"></ul> 40 </div> 41 </div> 42 </div> 43</section>
class Controller_Mypage_Piy extends Controller_Mypage { public function action_index() { $post = Input::post(); $default_values = array(); $post = myUtil::setDefaultPostData($post,$default_values); $file = Input::file(); $filedata = array(); $error_flag = false; $error_list = array(); // 初期オブジェクトの生成 $piy_post = Model_PiyPost::forge(); // validate $error_list = array(); if (!empty($post['mode'])) { $val = Model_Validate_PiyPost::validate('add'); if (!$val->run()) { parent::$_view->set_global('error', $val->error()); $error_flag = true; } } if (!empty($post['mode'])) { $piy_post->club_member_id = $this->_club_member->id; $piy_post->body = $post["body"]; $piy_post->lang = $this->_club_member->piy_lang; $piy_post->house_id = $this->_club_member->house->id; $piy_post->approval_flag = "H"; if ($this->_club_member->house instanceof Model_House) { Model_House::setHousesData(array($this->_club_member->house), Config::get("language")); } } // データをセット $data["lang"] = $this->_lang; $data["post"] = $post; $data["piy_post"] = $piy_post; $data["club_member"] = $this->_club_member; $data["filedata"] = $filedata; // モードに応じて処理を変える if ($this->_club_member->blog_flag != "X") { parent::$_view->set('content', ViewModel::forge('mypage/piy/wait')->set('data', $data)); } else if ((empty($post['mode'])) || $error_flag) { parent::$_view->set('content', ViewModel::forge('mypage/piy/index')->set('data', $data)); } elseif ($post['mode'] == 'do') // 確認 { // データをセーブ $piy_post->save(); // 表示 parent::$_view->set('content', ViewModel::forge('mypage/piy/do')); } parent::$_view->set('title', ' | '); return parent::$_view; } public function action_add() { //var_dump($_FILES['file']); if (isset($_FILES['file']['error']) && is_int($_FILES['file']['error'])) { try { switch ($_FILES['file']['error']) { case UPLOAD_ERR_OK: break; case UPLOAD_ERR_NO_FILE: throw new RuntimeException('ファイルが選択されていません'); case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: throw new RuntimeException('ファイルサイズが大きすぎます'); default: throw new RuntimeException('その他のエラーが発生しました'); } // MIMEタイプチェック $mimeTypeCode = @exif_imagetype($_FILES['file']['tmp_name']); if (!in_array($mimeTypeCode, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG), true)) { throw new RuntimeException('画像でないファイル、又は未対応の画像形式です'); } // 作成したサムネイルデータを取得してbase64エンコード $imageFile = @base64_encode(@file_get_contents($_FILES['file']['tmp_name'])); $mimeTypeStr = @image_type_to_mime_type($mimeTypeCode); if ($imageFile && $mimeTypeStr) { // 画像を出力 echo "data:" . $mimeTypeStr . ";base64," . $imageFile; // ファイルアップロード // 初期オブジェクトの生成 $piy_post = Model_PiyPost::forge(); $default_values = array(); //$post = Input::post(); //$post = myUtil::setDefaultPostData($post,$default_values); $filedata = array(); $error_flag = false; $sizes = array( 'L' => array('w' => 400, 'h' => 400), 'M' => array('w' => 200, 'h' => 200), 'S' => array('w' => 100, 'h' => 100), ); $filedata = myImage::doConfirm2("clubmember/tmp/", $sizes, array("image/jpeg"), true); if (!empty($filedata['error'])) { parent::$_view->set_global('custom_error', $filedata['error']); $error_flag = true; } if($error_flag == false) { $filedatas = array( '0' => array( 'path' => $filedata['image'][0]->path, 'name' => $filedata['image'][0]->name, 'ext' => $filedata['image'][0]->ext, ) ); //ファイルアップロード $img_id = myImage::doDo($filedatas); if (!empty($img_id)) { $piy_post->img_id = $img_id[0]; } } } else { //MIMEタイプが取れていない際のエラー throw new RuntimeException('画像表示前になんらかのエラーが発生しました'); } } catch (RuntimeException $e) { //エラー情報をセットする //header('HTTP', true, 400); // bad requestを返すことにする $json = array(); $json['errorMessage'] = $e->getMessage(); echo json_encode($json,JSON_UNESCAPED_UNICODE); exit; } } exit; } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。