Hapus File Dengan Laravel
Jika teman-teman mengikuti tutorial laravel sebelumnya di malasngoding.com tentang membuat upload file ke database mysql dengan laravel, maka kita sudah punya form penginputan atau upload file, dan kita juga sudah menampilkan data dan gambar yang sudah diupload.
Saya ulas kembali apa saja yang sudah kita miliki sekarang dalam project laravel membuat upload dan hapus file dengan laravel ini.
Table
Table gambar dengan kolum seperti berikut :
- id
- file
- keterangan
- created_at
- updated_at
Baca kembali selengkapnya di tutorial upload file dengan laravel.
Routes => roures/web.php
1
2
|
Route::get(‘/upload’, ‘UploadController@upload’);
Route::post(‘/upload/proses’, ‘UploadController@proses_upload’);
|
Controllers => app/Http/Controllers/UploadController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Gambar;
class UploadController extends Controller
{
public function upload(){
$gambar = Gambar::get();
return view(‘upload’,[‘gambar’ => $gambar]);
}
public function proses_upload(Request $request){
$this–>validate($request, [
‘file’ => ‘required|file|image|mimes:jpeg,png,gif,webp|max:2048’,
‘keterangan’ => ‘required’,
]);
// menyimpan data file yang diupload ke variabel $file
$file = $request–>file(‘file’);
$nama_file = time().“_”.$file–>getClientOriginalName();
// isi dengan nama folder tempat kemana file diupload
$tujuan_upload = ‘data_file’;
$file–>move($tujuan_upload,$nama_file);
Gambar::create([
‘file’ => $nama_file,
‘keterangan’ => $request–>keterangan,
]);
return redirect()->back();
}
}
|
View => resources/views/upload.blade.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
<!DOCTYPE html>
<html>
<head>
<title>Tutorial Laravel #31 : Membuat Hapus File Dengan Laravel</title>
<link rel=“stylesheet” href=“https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css” integrity=“sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T” crossorigin=“anonymous”>
</head>
<body>
<div class=“row”>
<div class=“container”>
<h2 class=“text-center my-5”>Tutorial Laravel #31 : Membuat Hapus File Dengan Laravel</h2>
<h4><a target=“_blank” href=“https://www.malasngoding.com/hapus-file-dengan-laravel/”>www.malasngoding.com</a></h4>
<div class=“col-lg-8 mx-auto my-5”>
@if(count($errors) > 0)
<div class=“alert alert-danger”>
@foreach ($errors–>all() as $error)
{{$error }} <br/>
@endforeach
</div>
@endif
<form action=“/upload/proses” method=“POST” enctype=“multipart/form-data”>
{{csrf_field() }}
<div class=“form-group”>
<b>File Gambar</b><br/>
<input type=“file” name=“file”>
</div>
<div class=“form-group”>
<b>Keterangan</b>
<textarea class=“form-control” name=“keterangan”></textarea>
</div>
<input type=“submit” value=“Upload” class=“btn btn-primary”>
</form>
<h4 class=“my-5”>Data</h4>
<table class=“table table-bordered table-striped”>
<thead>
<tr>
<th width=“1%”>File</th>
<th>Keterangan</th>
<th width=“1%”>OPSI</th>
</tr>
</thead>
<tbody>
@foreach($gambar as $g)
<tr>
<td><img width=“150px” src=“{{ url(‘/data_file/’.$g->file) }}”></td>
<td>{{$g–>keterangan}}</td>
<td><a class=“btn btn-danger” href=“/upload/hapus/{{ $g->id }}”>HAPUS</a></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
|
Model => app/Gambar.php
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Gambar extends Model
{
protected $table = “gambar”;
protected $fillable = [‘file’,‘keterangan’];
}
|
Hasil nya seperti berikut.
Hapus File Dengan Laravel
Kita mulai proses penghapusan data dan filenya. perhatikan pada tampilan di atas, pada data yang tampil kita sudah membuat tombol untuk menghapus data dan gambar dengan laravel.
Silahkan perhatikan pada view upload.blade.php.
1
|
<a class=“btn btn-danger” href=“/upload/hapus/{{ $g->id }}”>HAPUS</a>
|
Kita sudah membuat link/tombol hapus yang akan mengarahkan halaman ke route /upload/hapus/{id} sambil mengirimkan id yang ingin dihapus data dan file gambarnya.
Maka sekarang kita buat route baru untuk menangani proses penghapusan data.
routes/web.php
1
|
Route::get(‘/upload/hapus/{id}’, ‘UploadController@hapus’);
|
Sehingga menjadi seperti berikut.
1
2
3
4
5
|
Route::get(‘/upload’, ‘UploadController@upload’);
Route::post(‘/upload/proses’, ‘UploadController@proses_upload’);
// hapus file
Route::get(‘/upload/hapus/{id}’, ‘UploadController@hapus’);
|
route /upload/hapus/{id} ini akan memproses method hapus() dalam controller UploadController.php.
Sekarang mari kita buat method hapus() dalam controller UploadController.php.
app/Http/Controllers/UploadController.php
1
2
3
4
5
6
7
8
9
10
|
public function hapus($id){
// hapus file
$gambar = Gambar::where(‘id’,$id)->first();
File::delete(‘data_file/’.$gambar–>file);
// hapus data
Gambar::where(‘id’,$id)->delete();
return redirect()->back();
}
|
pada method ini kita menangkap data id yang dikirim melalui url. yaitu id data yang ingin dihapus. kemudian kita ambil datanya dari table gambar. kenapa kita ambil data gambar yang berdasarkan id ini? karena kita butuh nama file gambar yang ada pada record data ini.
BACA : Mengambil Data Dengan Eloquent Laravel
Setelah kita memiliki nama file nya, maka kemudian kita hapus menggunakan fungsi delete() yang berasal dari class File pada laravel.
Ingat !, upload gambar yang sebelumnya kita buat, file gambar nya kita buat dalam folder βdata_fileβ dalam folder βpublicβ. karena segala sesuatu yang berhubungan dengan file di laravel, folder public selalu menjadi prioritas.
Karena kita menggunakan class File, maka kita wajib memanggilnya terlebih dulu.
1
|
use File;
|
Sehingga keseluruhan isi controller UploadController.php sekarang seperti berikut.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Gambar;
use File;
class UploadController extends Controller
{
public function upload(){
$gambar = Gambar::get();
return view(‘upload’,[‘gambar’ => $gambar]);
}
public function proses_upload(Request $request){
$this–>validate($request, [
‘file’ => ‘required|file|image|mimes:jpeg,png,gif,webp|max:2048’,
‘keterangan’ => ‘required’,
]);
// menyimpan data file yang diupload ke variabel $file
$file = $request–>file(‘file’);
$nama_file = time().“_”.$file–>getClientOriginalName();
// isi dengan nama folder tempat kemana file diupload
$tujuan_upload = ‘data_file’;
$file–>move($tujuan_upload,$nama_file);
Gambar::create([
‘file’ => $nama_file,
‘keterangan’ => $request–>keterangan,
]);
return redirect()->back();
}
public function hapus($id){
// hapus file
$gambar = Gambar::where(‘id’,$id)->first();
File::delete(‘data_file/’.$gambar–>file);
// hapus data
Gambar::where(‘id’,$id)->delete();
return redirect()->back();
}
}
|
Bagian terakhir dari method hapus() ini kita mengalihkan halaman kembali ke halaman sebelumnya dengan fungsi redirect()->back().
Hapus Data Beserta Gambar Dengan Laravel
Oke sekarang kita lihat hasilnya, Akses project kita dengan menjalankan php artisan serve. kemudian akses localhost:8000/upload.
Coba klik HAPUS pada salah satu record data yang ada.
Sekarang data akan hilang.
Kita cek juga pada folder data_file, apakah gambar berhasil dihapus.
Oke selesai. sekarang kita sudah berhasil membuat upload file dengan laravel, dan kita juga telah berhasil membuat proses hapus data beserta gambar dengan laravel.