Tentu, berikut adalah artikel mengenai tutorial menghapus file dengan Laravel.
Pada tutorial sebelumnya, kita telah berhasil mengunggah file ke server menggunakan Laravel. Namun, dalam aplikasi nyata, kemampuan untuk mengelola file—termasuk menghapusnya—juga sangat penting. Proses menghapus file di Laravel sama mudahnya dengan mengunggahnya, berkat facade Storage yang tangguh.
Pada tutorial ini, kita akan belajar cara menghapus file yang tersimpan di direktori storage/app/public secara aman dan efisien.
1. Memahami Metode Storage::delete()
Laravel menyediakan metode delete() yang merupakan bagian dari facade Storage untuk menghapus file dari disk yang telah dikonfigurasi.
Metode ini mengambil satu parameter, yaitu jalur file relatif dari root disk. Misalnya, jika file kamu berada di storage/app/public/uploads/dokumen.pdf, jalur yang perlu kamu berikan ke metode delete() adalah 'uploads/dokumen.pdf'.
// Sintaks dasar untuk menghapus file
Storage::disk('public')->delete('path/to/file.jpg');
2. Menyiapkan Controller dan Route
Untuk menghapus file, kita membutuhkan sebuah controller dan route yang akan menangani permintaan penghapusan dari pengguna. Kita akan melanjutkan dari contoh tutorial sebelumnya dan membuat method baru di FileUploadController.
A. Menambahkan Route
Buka file routes/web.php dan tambahkan route baru untuk aksi penghapusan.
// routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\FileUploadController;
// ... (route upload dari tutorial sebelumnya)
// Route untuk menghapus file
// Perhatikan: Menggunakan parameter 'filename' untuk identifikasi
Route::get('/delete/{filename}', [FileUploadController::class, 'deleteFile'])->name('file.delete');
Catatan: Dalam aplikasi produksi, disarankan menggunakan metode DELETE atau POST dengan perlindungan CSRF untuk menghapus data, bukan GET, demi alasan keamanan. Namun, untuk contoh tutorial, GET lebih sederhana untuk diuji.
B. Membuat Metode di Controller
Sekarang, tambahkan method deleteFile di app/Http/Controllers/FileUploadController.php.
// app/Http/Controllers/FileUploadController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class FileUploadController extends Controller
{
// ... (method showUploadForm dan uploadFile dari tutorial sebelumnya)
/**
* Menghapus file dari storage.
*
* @param string $filename
* @return \Illuminate\Http\RedirectResponse
*/
public function deleteFile($filename)
{
// 1. Tentukan path file
$filePath = 'uploads/' . $filename;
// 2. Periksa apakah file ada
if (Storage::disk('public')->exists($filePath)) {
// 3. Jika file ada, hapus
Storage::disk('public')->delete($filePath);
return redirect()->back()->with('success', 'File berhasil dihapus!');
}
return redirect()->back()->with('error', 'File tidak ditemukan!');
}
}
Penjelasan Kode Controller:
- Metode
deleteFile()menerima$filenameyang berasal dari parameter route. $filePath = 'uploads/' . $filename;menggabungkan nama file dengan nama direktori tempat file disimpan, membentuk jalur lengkap.Storage::disk('public')->exists($filePath)adalah langkah krusial. Ini memeriksa apakah file benar-benar ada sebelum mencoba menghapusnya, mencegah aplikasi mengalami error jika file yang dimaksud tidak ditemukan.Storage::disk('public')->delete($filePath)adalah perintah utama untuk menghapus file.
3. Contoh Praktik: Menghapus File
Karena kita tidak memiliki daftar file yang diunggah di tampilan, kita akan membuat contoh sederhana dengan menghapus file yang sudah ada. Asumsikan kamu sudah mengunggah file bernama my_uploaded_file.jpg melalui tutorial sebelumnya.
- Pastikan development server Laravel berjalan:
Bash
php artisan serve - Buka browser kamu dan kunjungi URL berikut:
http://127.0.0.1:8000/delete/my_uploaded_file.jpgGanti
my_uploaded_file.jpgdengan nama file yang benar yang ada di direktoristorage/app/public/uploadskamu. - Setelah mengakses URL tersebut, kamu akan dialihkan kembali ke halaman sebelumnya dengan pesan sukses.
- Periksa direktori
storage/app/public/uploadskamu. File yang kamu sebutkan seharusnya sudah tidak ada lagi.
4. Menangani File yang Terhubung ke Database
Dalam banyak kasus, kamu mungkin menyimpan informasi file (seperti nama, ukuran, dan jalur) di database. Dalam situasi ini, proses penghapusan harus mencakup dua langkah:
- Hapus file dari storage.
- Hapus catatan/rekaman file dari database.
// Contoh ilustrasi dalam controller
use App\Models\File; // Asumsikan kamu punya model File
public function deleteAndRemoveRecord(File $file)
{
// Hapus file dari storage terlebih dahulu
Storage::disk('public')->delete($file->path);
// Hapus record dari database
$file->delete();
return redirect()->back()->with('success', 'File dan record berhasil dihapus!');
}
Dengan menguasai metode Storage::delete(), kamu sekarang bisa mengelola file di aplikasi Laravel kamu dengan lebih baik, memberikan fungsionalitas upload dan hapus yang lengkap dan aman.