###実現したいこと
現在LaravelでFullcalendarの実装をしています。
イベント情報の登録、更新処理はできたのですが、削除方法がわからず困っています。
自力で試してみたのですが、JSの知識が乏しいため、なかなかうまくいかない状態です。
###該当のソースコード
現在はカレンダーが表示されていて、登録されているイベントをクリックするとモーダル更新用の画面が出てくるようになっています。
更新用のモーダルに登録ボタンと削除ボタンを設置して、削除ボタンを押したらデータが削除されるようにしたいです。
現在、データを表示させるindexアクションがajax
通信の際にid
を返すようにしているため、更新処理の際はvalue
の取得にJSを使用しました。
通常だとform
タグのaction
属性にid
を指定し送信すると思うのですが、id
を渡すことができていないため、どのようにすればいいのかわからない状態です。
modal.blade.php
php
1<!-- 新規登録 --> 2<form id="task-form" method="POST" action="{{ route('done_task') }}"> 3 @csrf 4 <input type="title" id="title_edit" name="title"> 5 <input type="date" id="start_edit" name="start"> 6 <input type="color" id="color_edit" name="textColor"> 7 <div class="modal-btn"> 8 <button class="modal__btn modal__btn-primary" type="submit">登録する</button> 9 <a id="expire-btn" class="modal__btn" data-micromodal-close aria-label="Close this dialog window">キャンセル</a> 10 </div> 11</form>
edit_modal.blade.php
php
1<!-- 更新 --> 2<form id="task-form" method="POST" action="{{ route('editEvent') }}"> 3 @csrf 4 <input type="hidden" id="id" value="" name="id"> 5 <input type="title" id="title_edit" name="title" value=""> 6 <input type="date" id="start_edit" name="start" value=""> 7 <input type="color" id="color_edit" name="textColor" value=""> 8 <div class="modal-btn"> 9 <button id="task-update" class="modal__btn modal__btn-primary" type="submit">変更する</button> 10 <!-- 削除ボタン --> 11 <a href="#" id="delete-task" class="cancel-btn">削除する</a> 12 </div> 13</form>
calendar.js
js
1$(document).ready(function () { 2 $('#calendar').fullCalendar({ 3 firstDay: 1, 4 editable: true, 5 selectable: true, 6 events: '/home', 7 // 更新前の情報を表示 8 eventClick: function(info) { 9 document.getElementById("id").value = info.id; 10 document.getElementById("title_edit").value = info.title 11 document.getElementById("start_edit").value = info.start._i 12 document.getElementById("color_edit").value = info.textColor 13 MicroModal.show('modal-2'); 14 } 15}); 16// イベント削除 17$("#delete-task").on("click", function() { 18 var event = calendar.getEventById(info.id); 19 event.remove(); 20});
DoneTaskController.php
php
1 public function index(Request $request) 2 { 3 $user_id = Auth::id(); 4 5 if ($request->ajax()) 6 { 7 $data = DoneTask::select('id','title', 'start', 'textColor')->where('user_id', $user_id)->get(); 8 return response()->json($data); 9 10 } 11 12 return view('home'); 13 } 14 15public function store(Done $request) 16 { 17 $task = new DoneTask; 18 $task->user_id = Auth::id(); 19 $task->start = $request->input('start'); 20 $task->textColor = $request->input('textColor'); 21 if(isset($_POST['title'])) 22 { 23 $title = implode(',', $_POST['title']); 24 $task->title = $title; 25 } 26 27 $task->save(); 28 29 return redirect('/home'); 30 } 31 32public function editEventDate(Request $request) 33 { 34 $task = DoneTask::find($request->input('id')); 35 36 $task->start = $request->input('start'); 37 38 $task->textColor = $request->input('textColor'); 39 if(isset($_POST['title'])) 40 { 41 $title = implode(',', $_POST['title']); 42 $task->title = $title; 43 } 44 45 $task->save(); 46 47 return redirect('/home'); 48 }
web.php
php
1Route::get('/home', 'DoneTaskController@index'); 2Route::post('/store', 'DoneTaskController@store')->name('done_task'); 3Route::post('/editEventDate', 'DoneTaskController@editEventDate')->name('editEvent'); 4Route::post('/deleteEvent', 'DoneTaskController@deleteEvent')->name('deleteEvent'); 5
上記の方法だとinfo.id
が取得できないので、削除できていないのだと思われますが、代替案がわからない状態です。
###補足情報
-各バージョン
-Laravel 6.x
-PHP 7.4.9
-Fullcalendar v5
初心者で申し訳ございませんが、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー