LoginSignup
11
11

More than 5 years have passed since last update.

【Laravel】確認モーダルから削除を行う方法

Posted at

モーダルとは

モーダルは、ボタンを押したときに一度確認するウインドウのことです。
ダイアログも同じ意味のようですが、若干違いがあるようです。

モーダルとダイアログの違い

ダイアログは警告や確認のメッセージウインドウのこと。
モーダルはダイアログの一種だけれども、そのウインドウを処理しないと先に進めないもの。

つまりダイアログのモーダルではないものは警告だけで、OKを押せばページが切り替わるけど、キャンセルを押しても問題ないようなメッセージが想定できる。

一覧画面の削除方法

なぜ、一覧画面からの削除をわざわざ書いているかというと、一覧画面のモーダルに削除対象の情報を送るのに一手間必要だから。
例えば、投稿一覧画面にPostが並んでいるとする。
そのPostに削除ボタンをつければそのまま削除できるのだが、
一度モーダルを表示させると、モーダルはどのPostから来た情報なのかがわからないみたい。

これが編集画面だと、URLにIDあるしすでに変数にPostが渡されているから理解してくれる。

どうやって理解させようか

これなんだが、一度JSで取得してからモーダルに渡すことで解消する。

post.index1.blade.php
<button type="button" data-toggle="modal" data-target="#modal_delete" data-title="{{ $post->id }}" data-url="post/index">削除</button>
post.index2.blade.php
  <div class="modal" tabindex="-1" role="dialog" id="modal_delete">
    <form role="form" class="form-inline" method="POST" action="">
      {{ csrf_field() }}
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-body">
            <p></p>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">キャンセル</button>
            <button type="submit" class="btn btn-danger">削除</button>
          </div>
        </div>
      </div>
    </form>
  </div>
post.index3.blade.php
  <script>
    $('#modal_delete').on('shown.bs.modal', function (event) {
      var button = $(event.relatedTarget);
      var title = button.data('title');
      var url = button.data('url');
      var modal = $(this);
      modal.find('.modal-body p').eq(0).text(title);
      modal.find('form').attr('action',url);
    });
  </script>

全て1つのファイルへ書き込んでいるとします。

post.index1.blade.phpでボタンをクリックして、#modal-deleteを探します。
post.index3.blade.phpでJS用のデータに変換します。
post.index2.blade.phpでモーダルを表示し、必要なデータを取り込みます。

という流れです。
これで一覧画面でも個別のデータを受け渡すことが可能です。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11