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 :
Next ....
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 :
maka akan membentuk tabel seperti berikut pada database
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
Posting Komentar