Opsi generate
Terdapat pilihan generate yaitu
php artisan proton:generate [folder] [file] --modal
Opsi generate --modal
digunakan untuk meng-generate kode terutama pada form insert dan update untuk menggunakan modal bootstrap. selain itu ada juga perbedaan kode di file [file]Controller dan [file]ListView antara opsi --modal
dengan yang standar sebelumnya
Berikut adalah perbedaan dengan dan tanpa --modal
--modal
Perbedaan pengecekan request ajax pada method
public function Create(Request $request)
danpublic function Edit(Request $request)
di file [file]Controller.php. Berikut kode perbedaanya :
//dengan proses check ajax
if (!$request->ajax() || !$this->acl($this->controller_path)) {
abort(401);
}
//tanpa proses check ajax
if (!$request->ajax() || !$this->acl($this->controller_path)) {
abort(401);
}
Meskipun terdapat pengecekan ajax, tetapi saat pengembangan dirasa tidak perlu pengecekan ajax artinya langsung menggunakan form redirect page, maka tinggal hapus saja pengecekannya. Tidak masalah.
Perbedaan pada default btn_create di [file]ListView.php, fungsi TableView
()
.
// penggunaan button helper untuk memanggil form modal
'btn_create' => ButtonHelper::button_modal(url($this->controller_path.'/create')),
// btn_create menggunakan Button helper yang langsung redirect page
'btn_create' => ButtonHelper::href_redirect(
target : url($this->controller_path . '/create'),
btn_class : 'btn-sm btn-outline-primary',
icon : 'plus', text: 'Create'
),
By default, btn_create berada di dalam fungsi TableView() di file [file]ListView.php
Perbedaan pada btn_edit di
set_data_before_send()
pada [file]ListView.php. Hampir sama seperti diatas yaitu terkait pemanggilan modal atau redirect page
// penggunaan button helper untuk memanggil form modal edit
'btn_edit' => (!$this->acl($this->controller_path)) ? '-' :ButtonHelper::btn_detail_modal(
url($this->controller_path.'/detail/'.$key->uuid),'#modalForm'
),
// menggunakan Button helper yang langsung redirect page
'btn_edit' => (!$this->acl($this->controller_path)) ? '-' : ButtonHelper::href_redirect(
target : url($this->controller_path . '/detail/' . $key->uuid),
btn_class : 'btn-sm btn-light border rounded',
icon : 'expand'
),
perbedaan pada form.blade.php di resources/views/[file] yang digenerate
// Some code
@php
$header_form = @$type == 'create' ? 'New' : 'Edit';
$btn_submit = @$type == 'create' ? 'Save' : 'Update';
@endphp
@section('form-field')
<input class="id_reference" type="hidden" name="id_reference" value="{{ @$results->id}}">
<x-select label="Source" name="option" search width="3">
<option value="0" {{@$results->option == 0 ? 'selected':''}}>Kosong</option>
<option value="1" {{@$results->option == 1 ? 'selected':''}}>Satu</option>
</x-select>
<x-input label="Name" width="3" name="name" placeholder="Max 200" required value="{{@$results->name}}"/>
<x-input label="Code" width="3" name="code" placeholder="Max 200" required value="{{@$results->code}}"/>
<!-- Lihat Komponen lengkap pada dokumentasi input -->
@if(@$results) //opsional
<hr>
<div class="form-group row">
<label class="col-md-3 control-label">Insert</label>
<div class="col-md-9 bg-light">
<small>{{@$results->user_insert}} <br>{{date('d-m-Y H:i',strtotime(@$results->dt_insert))}}</small>
</div>
</div>
@endif
@endsection
@section('form-js')
<script type="text/javascript">
//pastikan tidak ada variable, id, class yang conflict dengan variable page-index
//yang dipake js di page-index
jQuery(document).ready(function(){
$("select").selectpicker();
// Load fungsi js untuk form modal lainnya
dynamic_url = controller_path+"/{{@$type == 'create' ? 'store' : 'update'}}";
$('#formData').validator();
hideFullLoader();
});
// tambahan fungsi js untuk form modal special case, tapi ati2 dengan js yang ada di page-index.
</script>
@endsection
@include('layouts.form.simple-modal')
htm
// Some code
@extends('layouts.blank-frame')
@php
$modal_size = 'modal-md';
$section = 'Form Create ';
@endphp
@section('title',$section)
@section('blank-content')
<h4 class="mt-5 col-lg-8">Create</h4>
<hr>
<form id="formData" method="post" class="col-lg-8">
@csrf
<input class="id_reference" type="hidden" name="id_reference" value="{{ @$results->uuid}}">
<x-input label="Name" width="3" name="name" placeholder="Max 200" required value="{{@$results->name}}" />
<x-input label="Code" width="3" name="code" placeholder="Max 200" required value="{{@$results->code}}" />
<x-select label="Source" name="option" search width="3" required>
<option value="0" {{@$results->option == 0 ? 'selected':''}}>Kosong</option>
<option value="1" {{@$results->option == 1 ? 'selected':''}}>Satu</option>
</x-select>
<div class="col">
<div class="form-check row col-md-9 offset-md-3">
<input class="form-check-input" type="checkbox" value="">
<label class="form-check-label font-weight-bold text-primary">
Checkbox
</label>
</div>
</div>
<hr>
<div class="alert alert-danger print-error-msg" style="display:none">
<ul></ul>
</div>
<div class="form-group row mt-2">
<div class="col-md-9 offset-md-3">
<div class="d-flex">
<button type="submit" class="btn btn-primary">{{@$type == 'create' ? 'Simpan Data' : 'Update Data'
}}</button>
@if(@$backlink !== null)
<a href="{{url($backlink)}}" class="btn ml-2 btn-outline-secondary">Kembali</a>
@else
<a href="{{url($controller_path)}}" class="btn ml-2 btn-outline-secondary">Cancel</a>
@endif
</div>
</div>
</div>
</form>
@endsection
@section('extend-js')
<script type="text/javascript">
let dynamic_url = controller_path + '/{{@$type == "create" ? "store" : "update"}}';
var modal_form = false;
jQuery(document).ready(function () {
$('#formData').on('submit', function (e) {
e.preventDefault(); // prevent pengiriman form bisasa
ajaxFormSubmit();
});
$('#formData input').on('keypress', function (e) {
if (e.which === 13) { // 13 adalah kode tombol "Enter"
e.preventDefault(); // prevent pengiriman form bisasa
// ajaxFormSubmit();
}
});
$('#formData').validator();
hideFullLoader()
});
//feel free nulis js
</script>
@endsection
Penggunaan opsi --modal biasanya dipakai jika transaksi / operasi yang simple dan tidak menggunakan banyak javascript
Last updated