Belajar CRUD Laravel 5.5 dan Ajax

Latihan Membuat CRUD dengan Laravel 5.5 dan Ajax !, dalam tutorial ini kita akan mempelajari cara sederhana membangun project CRUD dalam satu halaman/file, maksudnya adalah ketika kita menyimpan, edit atau memperbaharui data kita tetap berada dalam satu halaman tanpa memanggil halaman/file lain. jadi kita tidak perlu membuat form file create, edit secara secarah terpisah. Semoga mengerti Penjelasan saya . :).
Setelah anda berhasil menyelesaikan Tutorial ini maka hasilnya seperti gambar di bawah :

Langkah 1 : Buat Tabel
Pertama kita akan memuat file migrasi untuk membuat tabel baru ke database
jalankan perintah dibawah pada terminal/CMD
php artisan make:migration create_posts_table
perintah diatas akan menghasilkan sebuah file yang terletak di folder Database/Migration
ubah file tersebut seperti kode dibawah ini
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('details');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
Setelah itu jalankan pada terminal perintah dibawah :
php artisan migrate
maka akan membentuk tabel seperti berikut pada database

Next ....
Langkah 2 : Buat Model Post
Buat sebuah Model dengan nama Post.php didalam folder App
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
    protected $fillable = [
        'title', 'details'
    ];
}
Langkah 3 : Buat Route
Defenisikan rute dengan menambahkan kode di bawah pada Routes\web.php
Route::get('laravel-ajax-crud.html', 'PostController@crud');
Route::resource('posts','PostController');
Langkah 3 : Buat Controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Post;
class PostController extends Controller
{
    public function crud()
    {
        return view('crud');
    }
    public function index()
    {
        $posts = Post::latest()->paginate(5);
        return response()->json($posts);
    }
    public function store(Request $request)
    {
        $post = Post::create($request->all());
        return response()->json($post);
    }
    public function update(Request $request, $id)
    {
        $post = Post::find($id)->update($request->all());
        return response()->json($post);
    }
    public function destroy($id)
    {
        Post::find($id)->delete();
        return response()->json(['done']);
    }
}
Langkah 4 : Buat View
pada langkah ini kita akan membuat tampilannya dengan nama crud.blade.php
Resource\Views\crud.blade.php
<!DOCTYPE html>
<html>
<head>
    <title>Laravel 5.5 Ajax CRUD</title>
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.css">
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-lg-12 margin-tb">                   
<h2>Laravel 5.5 Ajax CRUD</h2>
    <br/>
                <div class="pull-left">
                <button type="button" class="btn btn-success" data-toggle="modal" data-target="#create-item">Tambah</button>
                </div>
             <div class="pull-right">
                <button type="button" class="btn btn-success" data-toggle="modal" data-target="#create-item">Tambah</button>
                </div>
            </div>
        </div>
        <table class="table table-bordered">
            <thead>
                <tr>
                <th>Title</th>
                <th>Details</th>
                <th width="200px">Action</th>
                </tr>
            </thead>
            <tbody>
            </tbody>
        </table>
        <ul id="pagination" class="pagination-sm"></ul>

        <div class="modal fade" id="create-item" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
          <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">×</span></button>
                <h4 class="modal-title" id="myModalLabel">Create</h4>
              </div>
              <div class="modal-body">
                    <form data-toggle="validator" action="{{ route('posts.store') }}" method="POST">
                        <div class="form-group">
                            <label class="control-label" for="title">TITEL :</label>
                            <input type="text" name="title" class="form-control" data-error="Please enter title." required />
                            <div class="help-block with-errors"></div>
                        </div>
                        <div class="form-group">
                            <label class="control-label" for="title">DESCRIPTION :</label>
                            <textarea name="details" class="form-control" data-error="Please enter description." required></textarea>
                            <div class="help-block with-errors"></div>
                        </div>
                        <div class="form-group">
                            <button type="submit" class="btn crud-submit btn-success">Submit</button>
                        </div>
                    </form>
              </div>
            </div>
          </div>
        </div>

        <div class="modal fade" id="edit-item" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
          <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">×</span></button>
                <h4 class="modal-title" id="myModalLabel">Edit Data</h4>
              </div>
              <div class="modal-body">
                    <form data-toggle="validator" action="/posts/" method="put">
                        <div class="form-group">
                            <label class="control-label" for="title">TITLE :</label>
                            <input type="text" name="title" class="form-control" data-error="Please enter title." required />
                            <div class="help-block with-errors"></div>
                        </div>
                        <div class="form-group">
                            <label class="control-label" for="title">DESCRIPTION :</label>
                            <textarea name="details" class="form-control" data-error="Please enter description." required></textarea>
                            <div class="help-block with-errors"></div>
                        </div>
                        <div class="form-group">
                            <button type="submit" class="btn btn-success crud-submit-edit">Submit</button>
                        </div>
                    </form>
              </div>
            </div>
          </div>
        </div>
    </div>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twbs-pagination/1.3.1/jquery.twbsPagination.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.5/validator.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
    <link href="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css" rel="stylesheet">
    <script type="text/javascript">
        var url = "<?php echo route('posts.index')?>";
    </script>
    <script src="public/js/crud-ajax.js"></script> 
</body>
</html>
Langkah 5 : Buat File Ajax
Pada langkah ini kita kan membuat sebuah file crud-ajax.js lalu yang akan di tempatkan pada folder Public .

Public/js/crud-ajax.js
var page = 1; var current_page = 1; var total_page = 0; var is_ajax_fire = 0; manageData(); /* manage data list */ function manageData() { $.ajax({ dataType: 'json', url: url, data: {page:page} }).done(function(data){ total_page = data.last_page; current_page = data.current_page; $('#pagination').twbsPagination({ totalPages: total_page, visiblePages: current_page, onPageClick: function (event, pageL) { page = pageL; if(is_ajax_fire != 0){ getPageData(); } } }); manageRow(data.data); is_ajax_fire = 1; }); } $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); /* Get Page Data*/ function getPageData() { $.ajax({ dataType: 'json', url: url, data: {page:page} }).done(function(data){ manageRow(data.data); }); } /* Add new Post table row */ function manageRow(data) { var rows = ''; $.each( data, function( key, value ) { rows = rows + '<tr>'; rows = rows + '<td>'+value.title+'</td>'; rows = rows + '<td>'+value.details+'</td>'; rows = rows + '<td data-id="'+value.id+'">'; rows = rows + '<button data-toggle="modal" data-target="#edit-item" class="btn btn-primary edit-item">Edit</button> '; rows = rows + '<button class="btn btn-danger remove-item">Delete</button>'; rows = rows + '</td>'; rows = rows + '</tr>'; }); $("tbody").html(rows); } /* Create new Post (Tambah data)*/ $(".crud-submit").click(function(e){ e.preventDefault(); var form_action = $("#create-item").find("form").attr("action"); var title = $("#create-item").find("input[name='title']").val(); var details = $("#create-item").find("textarea[name='details']").val(); $.ajax({ dataType: 'json', type:'POST', url: form_action, data:{title:title, details:details} }).done(function(data){ getPageData(); $(".modal").modal('hide'); toastr.success('Post Created Successfully.', 'Success Alert', {timeOut: 5000}); }); }); /* Remove Post (Hapus) */ $("body").on("click",".remove-item",function(){ var id = $(this).parent("td").data('id'); var c_obj = $(this).parents("tr"); $.ajax({ dataType: 'json', type:'delete', url: url + '/' + id, }).done(function(data){ c_obj.remove(); toastr.success('Post Deleted Successfully.', 'Success Alert', {timeOut: 5000}); getPageData(); }); }); /* Edit Post */ $("body").on("click",".edit-item",function(){ var id = $(this).parent("td").data('id'); var title = $(this).parent("td").prev("td").prev("td").text(); var details = $(this).parent("td").prev("td").text(); $("#edit-item").find("input[name='title']").val(title); $("#edit-item").find("textarea[name='details']").val(details); $("#edit-item").find("form").attr("action",url + '/' + id); }); /* Updated Post baru (Updated new Post) */ $(".crud-submit-edit").click(function(e){ e.preventDefault(); var form_action = $("#edit-item").find("form").attr("action"); var title = $("#edit-item").find("input[name='title']").val(); var details = $("#edit-item").find("textarea[name='details']").val(); $.ajax({ dataType: 'json', type:'PUT', url: form_action, data:{title:title, details:details} }).done(function(data){ getPageData(); $(".modal").modal('hide'); toastr.success('Post Updated Successfully.', 'Success Alert', {timeOut: 5000}); }); });

Komentar

Postingan populer dari blog ini

Tutorial Laravel