AJax로 Laravel 8 및 Laravel 6/7에서 모달을 생성하는 방법

15143 단어 jquerylaravelajaxmodal
안녕하세요, 오늘은 CRUD 앱에 작은 기능을 추가하려고 합니다.
부트스트랩 Modal을 사용하여 프로젝트를 생성, 편집 및 볼 수 있으며, 이것은 모달에 표시해야 하는 Laravel 6/7/8에서 수행하려는 모든 작업으로 확장할 수 있습니다.
Modal은 현재 페이지에서 벗어나지 않고 다른 페이지에서 작업할 수 있도록 도와주므로 현재 위치를 놓치지 않도록 도와줍니다. 우리는 이것을 달성하기 위해 Bootstrap, Jquery 및 Ajax를 사용할 것입니다. Jquery와 Ajax는 동적으로 편집하거나 보려는 항목의 ID가 있는 URL을 모달로 보냅니다.
항상 제 문화이기 때문에 스크린샷과 코드 스니펫이 있는 모든 개발자 수준으로 이 기사를 단순화할 것입니다. 코드만 필요하거나 기사를 따라가다가 실수한 경우 GIthub repo을 방문할 수 있습니다.

더 많은 업데이트를 받으려면 나를 팔로우하려면 내 버튼을 클릭하세요.

앞서 말했듯이 다른 페이지에서 작업을 수행하고 다시 돌아와야 하는 모든 작업은 다른 페이지로 이동하지 않고도 모달을 사용하여 수행할 수 있습니다. 스크립트 태그에 코드를 복사하고 클릭할 버튼의 ID와 표시할 모달의 ID를 변경하기만 하면 됩니다.
모달의 두 가지 크기를 표시할 것입니다. 하나는 작은 모달용이고 다른 하나는 중간 모달용입니다. 부트스트랩은 작은(modal-sm), 중간(기본값), 큰(modal-lg) 크기가 있습니다.



1단계: 앱 설정


  • 자식 클론https://github.com/Kingsconsult/laravel_8_crud.git
  • cd laravel_8_crud/
  • 작성기 설치
  • npm 설치
  • cp .env.example .env
  • php 숙련공 키:생성
  • .env 파일에 데이터베이스 구성을 추가합니다(이를 달성하는 방법에 대한 내 기사를 확인할 수 있음)
  • php artisan 마이그레이션
  • php artisan serve (서버가 열리면 http://127.0.0.1:8000 , 우리는 갈 수 있습니다)

  • http://127.0.0.1:8000/projects으로 이동

  • 오른쪽 상단의 녹색 버튼을 클릭하여 일부 프로젝트를 생성합니다.



  • 2단계: 부트스트랩, jquery, ajax 스크립트 태그 추가



    resources/views/layouts/디렉토리에 있는 app.blade.php의 헤드 섹션에서 아래에 다음 스크립트를 추가합니다.

    <title>App Name - @yield('title')</title>
    
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.css" rel="stylesheet">
    
    <link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
    <!-- Script -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js' type='text/javascript'></script>
    
    <!-- Font Awesome JS -->
    <script defer src="https://use.fontawesome.com/releases/v5.0.13/js/solid.js" integrity="sha384-tzzSw1/Vo+0N5UhStP3bvwWPq+uvzCMfrN1fEFe+xBmv1C/AtVX5K0uZtmcHitFZ" crossorigin="anonymous"> </script>
    <script defer src="https://use.fontawesome.com/releases/v5.0.13/js/fontawesome.js" integrity="sha384-6OIrr52G08NpOFSZdxxz1xdNSndlD4vdcf/q2myIUVO0VsqaGHJsB0RaBE01VTOY" crossorigin="anonymous"> </script>
    
    <link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' rel='stylesheet' type='text/css'>
    
    <style>
        .footer {
            position: fixed;
            left: 0;
            bottom: 0;
            width: 100%;
            background-color: #9C27B0;
            color: white;
            text-align: center;
        }
        body {
            background-color: #EDF7EF
        }
    
    </style>
    

    3단계: index.blade.php 편집



    resources/views/projects/디렉토리의 index.blade.php로 이동하여 아래 코드를 복사하여 붙여넣습니다.

    index.blade.php

    @extends('layouts.app')
    
    @section('content')
    
        <div class="row">
            <div class="col-lg-12 margin-tb">
                <div class="pull-left">
                    <h2>Laravel 8 CRUD </h2>
                </div>
                <div class="pull-right">
                    <a class="btn btn-success text-light" data-toggle="modal" id="mediumButton" data-target="#mediumModal"
                        data-attr="{{ route('projects.create') }}" title="Create a project"> <i class="fas fa-plus-circle"></i>
                    </a>
                </div>
            </div>
        </div>
    
        @if ($message = Session::get('success'))
            <div class="alert alert-success">
                <p>{{ $message }}</p>
            </div>
        @endif
    
        <table class="table table-bordered table-responsive-lg table-hover">
            <thead class="thead-dark">
                <tr>
                    <th scope="col">No</th>
                    <th scope="col">Name</th>
                    <th scope="col" width="30%">Introduction</th>
                    <th scope="col">Location</th>
                    <th scope="col">Cost</th>
                    <th scope="col">Date Created</th>
                    <th scope="col">Action</th>
                </tr>
            </thead>
            <tbody>
                @foreach ($projects as $project)
                    <tr>
                        <td scope="row">{{ ++$i }}</td>
                        <td>{{ $project->name }}</td>
                        <td>{{ $project->introduction }}</td>
                        <td>{{ $project->location }}</td>
                        <td>{{ $project->cost }}</td>
                        <td>{{ date_format($project->created_at, 'jS M Y') }}</td>
                        <td>
                            <form action="{{ route('projects.destroy', $project->id) }}" method="POST">
    
                                <a data-toggle="modal" id="smallButton" data-target="#smallModal"
                                    data-attr="{{ route('projects.show', $project->id) }}" title="show">
                                    <i class="fas fa-eye text-success  fa-lg"></i>
                                </a>
    
                                <a class="text-secondary" data-toggle="modal" id="mediumButton" data-target="#mediumModal"
                                    data-attr="{{ route('projects.edit', $project->id) }}">
                                    <i class="fas fa-edit text-gray-300"></i>
                                </a>
                                @csrf
                                @method('DELETE')
    
                                <button type="submit" title="delete" style="border: none; background-color:transparent;">
                                    <i class="fas fa-trash fa-lg text-danger"></i>
                                </button>
                            </form>
                        </td>
                    </tr>
                @endforeach
            </tbody>
        </table>
    
        {!! $projects->links() !!}
    
    
        <!-- small modal -->
        <div class="modal fade" id="smallModal" tabindex="-1" role="dialog" aria-labelledby="smallModalLabel"
            aria-hidden="true">
            <div class="modal-dialog modal-sm" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <div class="modal-body" id="smallBody">
                        <div>
                            <!-- the result to be displayed apply here -->
                        </div>
                    </div>
                </div>
            </div>
        </div>
    
    
        <!-- medium modal -->
        <div class="modal fade" id="mediumModal" tabindex="-1" role="dialog" aria-labelledby="mediumModalLabel"
            aria-hidden="true">
            <div class="modal-dialog" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <div class="modal-body" id="mediumBody">
                        <div>
                            <!-- the result to be displayed apply here -->
                        </div>
                    </div>
                </div>
            </div>
        </div>
    
    
        <script>
            // display a modal (small modal)
            $(document).on('click', '#smallButton', function(event) {
                event.preventDefault();
                let href = $(this).attr('data-attr');
                $.ajax({
                    url: href,
                    beforeSend: function() {
                        $('#loader').show();
                    },
                    // return the result
                    success: function(result) {
                        $('#smallModal').modal("show");
                        $('#smallBody').html(result).show();
                    },
                    complete: function() {
                        $('#loader').hide();
                    },
                    error: function(jqXHR, testStatus, error) {
                        console.log(error);
                        alert("Page " + href + " cannot open. Error:" + error);
                        $('#loader').hide();
                    },
                    timeout: 8000
                })
            });
    
            // display a modal (medium modal)
            $(document).on('click', '#mediumButton', function(event) {
                event.preventDefault();
                let href = $(this).attr('data-attr');
                $.ajax({
                    url: href,
                    beforeSend: function() {
                        $('#loader').show();
                    },
                    // return the result
                    success: function(result) {
                        $('#mediumModal').modal("show");
                        $('#mediumBody').html(result).show();
                    },
                    complete: function() {
                        $('#loader').hide();
                    },
                    error: function(jqXHR, testStatus, error) {
                        console.log(error);
                        alert("Page " + href + " cannot open. Error:" + error);
                        $('#loader').hide();
                    },
                    timeout: 8000
                })
            });
    
        </script>
    @endsection
    

    위의 코드에서 프로젝트를 생성하기 위한 앵커 태그에서 href=” ”를 제거하고 이를 data-attr=” “로 교체하고 data-toggle=” “, id=” “및 data-target도 추가했습니다. =” “.
    "모달 페이드"클래스로 테이블 아래에 두 개의 div를 만들었습니다. 이 div는 지정된 제목과 모달의 내용이 있는 다양한 크기의 모달을 표시합니다. 모달 div 안에는 modal-dialog 클래스가 있는 div가 있으며 여기에서 모달의 크기를 변경할 수 있습니다.
    마지막으로 모달 표시에 jquery, ajax 로직이 포함된 스크립트 태그를 추가했습니다.
    스크립트 태그에서 수행한 작업
  • 앵커 태그에 있는 버튼을 클릭하면 앵커 태그에 있는 URL을 가져와야 합니다
  • .
  • URL이 유효하고 성공하면 대상 모달의 ID를 가져오고 URL 내용을 모달 본문에 전달합니다
  • .
  • URL에 오류가 있는 경우 URL을 열 수 없다는 오류 메시지를 사용자에게 알립니다
  • .

    4단계: 페이지 생성, 편집, 표시 편집



    resources/views/projects/디렉토리에 있는 create.blade.php, edit.blade.php 및 show.blade.php로 이동하여 기본 레이아웃의 확장을 제거합니다.

    @extends(‘layouts.app’)
    @section(‘content’)
    @endsection
    

    그게 다야, 우리는 갈 수있어
  • 만들기 버튼 클릭

  • 표시 버튼 클릭

  • 수정 버튼 클릭

    나를 팔로우하거나 아래에 댓글을 남기거나 제안, 반응 또는 이메일, WhatsApp 또는 전화를 걸 수 있습니다. 내 연락처는 스크린샷에 있습니다.
    내 다른 게시물 방문







  • 좋은 웹페이지 즐겨찾기