Kalo kalian sudah membuat Controller nya
Pertama-tama kita buat Controller index nya atau metod index.
protected $model;
protected $title = 'Perjanjian Sewa';
protected $view = 'perjanjiansewa.';
protected $route = 'perjanjiansewa.';
protected $permission = '-perjanjiansewa';
public function __construct(PerjanjianSewa $model)
{
$this->model = $model;
View::share('title', $this->title);
View::share('view', $this->view);
View::share('route', $this->route);
View::share('permission', $this->permission);
$this->middleware('permission:' . 'manage' . $this->permission)->only('index');
$this->middleware('permission:' . 'create' . $this->permission)->only('create', 'store');
$this->middleware('permission:' . 'edit' . $this->permission)->only('edit', 'update');
$this->middleware('permission:' . 'delete' . $this->permission)->only('destroy');
}
public function index(Request $request)
{
if (\Auth::user()->isAbleTo('manage' . $this->permission)) {
$lokasipakan = LokasiPakan::orderBy('id', 'asc')->pluck('name', 'id')->toArray();
if ($request->ajax()) {
$data = PerjanjianSewa::with('user','lokasi_pakan')->select();
return DataTables::of($data)
->addColumn('action', function ($data) {
return view('datatables.action', [
'model' => $data,
'can_edit' => 'edit-perjanjiansewa',
'can_delete' => 'delete-perjanjiansewa',
'form_url' => route('perjanjiansewa.destroy', $data->id),
'edit_url' => route('perjanjiansewa.edit', $data->id),
'confirm_message' => 'Yakin mau menghapus ' . $data->name . '?'
]);
})
->editColumn('mulai_perjanjian', function ($data) {
return date('j F Y H:i:s', strtotime($data->mulai_perjanjian));
})
->editColumn('selesai_perjanjian', function ($data) {
return date('j F Y H:i:s', strtotime($data->selesai_perjanjian));
})
->editColumn('file', function($data){
return '<a href="'.asset('storage/file/'.$data->file).'" target="_blank">File Lampiran</a>';
})
->addIndexColumn()
->setRowId(function ($data) {
return $data->id;
})
->rawColumns(['status', 'file'])
->make(true);
}
return view($this->view . 'index')->with(compact('lokasipakan'));
} else {
return redirect()->back()->with('error', 'Permission denied.');
}
}
Kita lanjut ke pembuatan view index.blade.php
@extends('layouts.app')Kiata lanjut ke Metod create nya .
@section('page-title')
{{$title}}
@endsection
@section('content')
<!-- end page-title -->
<div class="row">
<div class="col-12">
<div class="card m-b-30">
<div class="card-body">
@permission('create'.$permission)
<a class="btn btn-primary waves-effect waves-light" href="{{ route($route.'create') }}">
<i class="mdi mdi-gamepad-round"></i> Tambah
</a>
<hr>
@endpermission
<br>
<br>
<table class="table-sm table-striped table-bordered dt-responsive nowrap data-table" style="border-collapse: collapse; border-spacing: 0; width: 100%;">
<thead class="bg-primary text-white">
<tr>
<th>No</th>
<th>User</th>
<th>Lokasi Pakan</th>
<th>Mulai Perjanjian</th>
<th>Selesai Perjanjian</th>
<th>File</th>
<th>Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div> <!-- end col -->
</div>
<!-- end row -->
@endsection
@section('script')
<script type="text/javascript">
$('.data-table').DataTable({
processing: true,
serverSide: true,
ajax: "{{ route($route.'index') }}",
columns: [
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false},
{ data: 'user.name', name: 'user.name' },
{ data: 'lokasi_pakan.name', name: 'lokasi_pakan.name' },
{ data: 'mulai_perjanjian', name: 'mulai_perjanjian'},
{ data: 'selesai_perjanjian', name: 'selesai_perjanjian'},
{ data: 'file', name: 'file'},
{ data: 'action', name: 'action', orderable: false, searchable: false},
],
order: [[0, 'desc']],
});
</script>
@endsection
public function create()
{
if (\Auth::user()->isAbleTo('create' . $this->permission)) {
$lokasipakan = LokasiPakan::orderBy('id', 'asc')->pluck('name', 'id')->toArray();
return view($this->view . 'create')->with(compact('lokasipakan'));
} else {
return redirect()->back()->with('error', __('Permission denied.'));
}
}
Sekarang kita buat metod store nya .
public function store(Request $request)
{
try {
$validator = \Validator::make(
$request->all(),
[
'lokasipakan' => 'required',
'mulai_perjanjian' => 'required',
'selesai_perjanjian' => 'required',
'file' => 'required',
],
[
'lokasipakan.required' => 'Silahkan Pilih Lokasi Pakan !',
'mulai_perjanjian.required' => 'Silahkan Masukan Mulai Perjanjian !',
'selesai_perjanjian.required' => 'Silahkan Masukan Selesai Perjanjian !',
'file.required' => 'Silahkan Masukan File !',
]
);
if ($validator->fails()) {
$messages = $validator->getMessageBag();
return redirect()->route($this->route . 'create', $request->type)->with('error', $messages->first())->withInput();
// throw new \Exception($messages->first());
}
$perjanjiansewa = new $this->model();
$perjanjiansewa->user_id = auth()->user()->id;
$perjanjiansewa->lokasi_pakan_id = $request->lokasipakan;
$perjanjiansewa->mulai_perjanjian = date('Y-m-d H:i:s', strtotime($request->mulai_perjanjian));
$perjanjiansewa->selesai_perjanjian = date('Y-m-d H:i:s', strtotime($request->selesai_perjanjian));
if ($request->file('file')) {
$uploadFile = $request->file('file');
$fileName = $uploadFile->hashName();
$file = $uploadFile->store('file', 'public');
$perjanjiansewa->file = $fileName;
}
$perjanjiansewa->save();
return redirect()->route($this->route . 'index')->with('success', 'Perjanjian Sewa Berhasil disimpan !');
} catch (\Exception $err) {
return redirect()->route($this->route . 'create')->with('error', $err->getMessage());
}
}
Kita lanjut ke Metod edit nya.
public function edit($id)
{
try{
$data = $this->model::find($id);
$lokasipakan = LokasiPakan::orderBy('id', 'asc')->pluck('name', 'id')->toArray();
$data->mulai_perjanjian = date('d-m-Y H:i', strtotime($data->mulai_perjanjian));
$data->selesai_perjanjian = date('d-m-Y H:i', strtotime($data->selesai_perjanjian));
$file = \Storage::url('public/file/');
return view($this->view . 'edit', compact('data', 'file', 'lokasipakan'));
} catch (\Exception $err) {
return redirect()->back()->with('error', $err->getMessage());
}
}
Sekarang kita buat metod Update nya.
public function update(Request $request, $id)
{
try {
$validator = \Validator::make(
$request->all(),
[
'lokasipakan' => 'required',
'mulai_perjanjian' => 'required',
'selesai_perjanjian' => 'required',
],
[
'lokasipakan.required' => 'Silahkan Pilih Lokasi Pakan !',
'mulai_perjanjian.required' => 'Silahkan Masukan Mulai Perjanjian !',
'selesai_perjanjian.required' => 'Silahkan Masukan Selesai Perjanjian !',
]
);
if ($validator->fails()) {
$messages = $validator->getMessageBag();
return redirect()->route($this->route . 'edit', $id)->with('error', $messages->first())->withInput();
// throw new \Exception($messages->first());
}
// dd($request->all());
$perjanjiansewa = $this->model::find($id);
$perjanjiansewa->user_id = auth()->user()->id;
$perjanjiansewa->lokasi_pakan_id = $request->lokasipakan;
$perjanjiansewa->mulai_perjanjian = date('Y-m-d H:i:s', strtotime($request->mulai_perjanjian));
$perjanjiansewa->selesai_perjanjian = date('Y-m-d H:i:s', strtotime($request->selesai_perjanjian));
// $perjanjiansewa->file = $request->file;
if ($request->file('file')) {
if ($perjanjiansewa->file && file_exists(storage_path('app/public/file/' . $perjanjiansewa->file))) {
\Storage::delete('public/file/' . $perjanjiansewa->file);
}
$uploadfile = $request->file('file');
$file = $uploadfile->hashName();
$uploadfile->store('file', 'public');
$perjanjiansewa->file = $file;
}
$perjanjiansewa->update();
return redirect()->route($this->route . 'index')->with('success', 'Perjanjian Sewa Berhasil diupdate !');
} catch (\Exception $err) {
return redirect()->route($this->route . 'edit', $id)->with('error', $err->getMessage());
}
}
Kita lanjut ke metod destroy nya .
public function destroy($id)
{
try {
$data = $this->model::find($id);
$imagePath = storage_path("app/public/file/{$data->file}");
if (File::exists($imagePath)) {
File::delete($imagePath);
}
$data->delete();
return redirect()->route($this->route . 'index')->with('success', 'Perjanjian Sewa Berhasil dihapus !');
} catch (\Exception $err) {
return redirect()->route($this->route . 'index')->with('error', $err->getMessage());
}
}
Kita lanjut membuat view Create nya create.blade.php.
@extends('layouts.app')Sekarang Kita lanjut ke view edit nya, edit.blade.php
@section('page-title')
{{'Tambah '.$title}}
@endsection
@section('style')
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.css" rel="stylesheet"/>
<link href="{{ asset('css/bootstrap-fileinput.css') }}" rel="stylesheet" type="text/css"/>
@endsection
@section('content')
<!-- end page-title -->
<div class="row">
<div class="col-lg-12">
<div class="card faq-box border-primary m-b-30">
<div class="card-body">
<form action="{{ route($route.'store') }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="form-group ">
<label class="col-sm-8 control-label" for="example-input-normal">Lokasi Pakan</label>
<div class="col-sm-12">
{!! Form::select('lokasipakan', ['' => 'Silahkan Pilih Lokasi Pakan']+$lokasipakan, null,['class' => 'form-control select2']) !!}
</div>
</div>
<div class="form-group">
<label class="col-sm-8 control-label" for="example-input-normal">Mulai Perjanjian</label>
<div class="col-sm-12">
{!! Form::text('mulai_perjanjian', null, ['class'=>'form-control datetimepicker', 'placeholder' => 'Masukkan Mulai Perjanjian', 'autocomplete' => 'off']) !!}
</div>
</div>
<div class="form-group">
<label class="col-sm-8 control-label" for="example-input-normal">Selesai Perjanjian</label>
<div class="col-sm-12">
{!! Form::text('selesai_perjanjian', null, ['class'=>'form-control datetimepicker', 'placeholder' => 'Masukkan Selesai Perjanjian', 'autocomplete' => 'off']) !!}
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="col-sm-8 control-label">File</label>
<div class="col-sm-12">
<div class="fileinput fileinput-new" data-provides="fileinput">
<div class="fileinput-new thumbnail" style="height: 150px;">
</div>
<div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px; line-height: 10px;"></div>
<div>
<span class="btn btn-primary btn-file">
<span class="fileinput-new"> Pilih Gambar </span>
<span class="fileinput-exists"> Ubah </span>
<input type="file" name="file">
</span>
<a href="javascript:void(0);" class="btn btn-danger fileinput-exists" data-dismiss="fileinput"> Hapus </a>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-offset-2 text-right">
<button type="submit" class="btn btn-primary save">Simpan</button>
<a href="{{ route($route.'index')}}" class="btn btn-secondary"> Kembali</a>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
<script src="{{ asset('js/bootstrap-fileinput.js') }}" type="text/javascript"></script>
<script type="text/javascript">
$('.datetimepicker').datetimepicker({
format: 'DD-MM-YYYY',
locale: 'ru',
icons: {
previous: "fas fa-chevron-left",
next: "fas fa-chevron-right",
up: "fa fa-arrow-up",
down: "fa fa-arrow-down"
},
sideBySide: true,
showClose: true
});
</script>
@endsection
@extends('layouts.app')
@section('page-title')
{{'Edit '.$title}}
@endsection
@section('style')
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.css" rel="stylesheet"/>
<link href="{{ asset('css/bootstrap-fileinput.css') }}" rel="stylesheet" type="text/css"/>
@endsection
@section('content')
<!-- end page-title -->
<div class="row">
<div class="col-lg-12">
<div class="card faq-box border-primary m-b-30">
<div class="card-body">
<form action="{{ route($route.'update', $data->id) }}" method="POST" enctype="multipart/form-data">
@csrf
@method('put')
<div class="form-group ">
<label class="col-sm-8 control-label" for="example-input-normal">Lokasi Pakan</label>
<div class="col-sm-12">
{!! Form::select('lokasipakan', ['' => 'Silahkan Pilih Lokasi Pakan']+$lokasipakan, $data->lokasi_pakan_id,['class' => 'form-control select2']) !!}
</div>
</div>
<div class="form-group">
<label class="col-sm-8 control-label" for="example-input-normal">Mulai Perjanjian</label>
<div class="col-sm-12">
{!! Form::text('mulai_perjanjian', $data->mulai_perjanjian, ['class'=>'form-control datetimepicker', 'placeholder' => 'Masukkan Mulai Perjanjian', 'autocomplete' => 'off']) !!}
</div>
</div>
<div class="form-group">
<label class="col-sm-8 control-label" for="example-input-normal">Selesai Perjanjian</label>
<div class="col-sm-12">
{!! Form::text('selesai_perjanjian', $data->selesai_perjanjian, ['class'=>'form-control datetimepicker', 'placeholder' => 'Masukkan Selesai Perjanjian', 'autocomplete' => 'off']) !!}
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="col-sm-8 control-label">File</label>
<div class="col-sm-12">
<div class="fileinput fileinput-new" data-provides="fileinput">
<div class="fileinput-new thumbnail" style="height: 150px;">
<img src="{{$file.$data->file}}" alt="">
</div>
<div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px; line-height: 10px;"></div>
<div>
<span class="btn btn-primary btn-file">
<span class="fileinput-new"> Pilih Gambar </span>
<span class="fileinput-exists"> Ubah </span>
<input type="file" name="file">
</span>
<a href="javascript:void(0);" class="btn btn-danger fileinput-exists" data-dismiss="fileinput"> Hapus </a>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-offset-2 text-right">
<button type="submit" class="btn btn-primary save">Simpan</button>
<a href="{{ route($route.'index')}}" class="btn btn-secondary"> Kembali</a>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
<script src="{{ asset('js/bootstrap-fileinput.js') }}" type="text/javascript"></script>
<script type="text/javascript">
$('.datetimepicker').datetimepicker({
format: 'DD-MM-YYYY',
locale: 'ru',
icons: {
previous: "fas fa-chevron-left",
next: "fas fa-chevron-right",
up: "fa fa-arrow-up",
down: "fa fa-arrow-down"
},
sideBySide: true,
showClose: true
});
</script>
@endsection
Comments