From 21679486eabdc258d6ea0193ca423269a7782c65 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Mon, 6 Jul 2026 01:28:06 +0700 Subject: [PATCH] petani dan lahan --- app/Enums/KondisiTanaman.php | 2 +- .../Web/Produktivitas/PetaniController.php | 68 +++- .../Produktivitas/PetaniLahanController.php | 5 +- .../views/produktivitas/petani/add.blade.php | 312 ++++++++++++------ .../views/produktivitas/petani/edit.blade.php | 305 +++++++++++------ .../produktivitas/petani/header.blade.php | 220 +++++++++--- .../produktivitas/petani/lahan/add.blade.php | 81 ++--- .../produktivitas/petani/lahan/edit.blade.php | 109 +++--- .../petani/lahan/index.blade.php | 26 +- .../petani/lahan/sidebar.blade.php | 23 ++ routes/web.php | 1 + 11 files changed, 769 insertions(+), 383 deletions(-) create mode 100644 resources/views/produktivitas/petani/lahan/sidebar.blade.php diff --git a/app/Enums/KondisiTanaman.php b/app/Enums/KondisiTanaman.php index d8d8bdd..a1a8c64 100644 --- a/app/Enums/KondisiTanaman.php +++ b/app/Enums/KondisiTanaman.php @@ -6,6 +6,6 @@ enum KondisiTanaman: string { case BAIK = 'baik'; case SEDANG = 'sedang'; - case SAKIT = 'sakit'; + case BURUK = 'buruk'; case MATI = 'mati'; } diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniController.php b/app/Http/Controllers/Web/Produktivitas/PetaniController.php index 2808ba7..4723bfc 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniController.php @@ -9,6 +9,7 @@ use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; +use Illuminate\Support\Facades\Storage; use App\Models\Wilayah\Provinsi; use App\Models\Pertanian\Petani; @@ -75,12 +76,28 @@ class PetaniController extends Controller //'komoditas_id' => ['required','exists:master_komoditas,id'], 'status_perkawinan' => ['required', Rule::enum(Pernikahan::class)], 'ktp' => ['nullable', 'min:16', 'max:16'], - 'file_ktp' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + 'file_ktp' => ['nullable', 'image', 'mimes:jpeg,jpg,png', 'max:2048'], 'kk' => ['nullable', 'min:16', 'max:16'], - 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], - 'foto' => ['nullable', 'file', 'mimes:jpeg,jpg,png', 'max:2048'], + 'file_kk' => ['nullable', 'image', 'mimes:jpeg,jpg,png', 'max:2048'], + 'foto' => ['nullable', 'image', 'mimes:jpeg,jpg,png', 'max:2048'], + 'nomor_telepon' => ['nullable', 'numeric', 'max:20'], ]); + if ($request->hasFile('file_ktp')) { + $file_ktp = $request->file('file_ktp'); + $validatedData['path_ktp'] = $file_ktp->store('petani/ktp'); + $validatedData['file_ktp'] = $file_ktp->getClientOriginalName(); + } + if ($request->hasFile('file_kk')) { + $file_kk = $request->file('file_kk'); + $validatedData['path_kk'] = $file_kk->store('petani/kk'); + $validatedData['file_kk'] = $file_kk->getClientOriginalName(); + } + if ($request->hasFile('foto')) { + $file_foto = $request->file('foto'); + $validatedData['foto'] = $file_foto->store('petani/foto'); + } + Petani::create([...$validatedData, 'uid' => 'PTN-'. strtoupper(Str::random(10)), 'created_by' => auth()->id(), @@ -145,8 +162,24 @@ class PetaniController extends Controller 'kk' => ['nullable', 'min:16', 'max:16'], 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], 'foto' => ['nullable', 'file', 'mimes:jpeg,jpg,png', 'max:2048'], + 'nomor_telepon' => ['nullable', 'numeric', 'max:20'], ]); + if ($request->hasFile('file_ktp')) { + $file_ktp = $request->file('file_ktp'); + $validatedData['path_ktp'] = $file_ktp->store('petani/ktp'); + $validatedData['file_ktp'] = $file_ktp->getClientOriginalName(); + } + if ($request->hasFile('file_kk')) { + $file_kk = $request->file('file_kk'); + $validatedData['path_kk'] = $file_kk->store('petani/kk'); + $validatedData['file_kk'] = $file_kk->getClientOriginalName(); + } + if ($request->hasFile('foto')) { + $file_foto = $request->file('foto'); + $validatedData['foto'] = $file_foto->store('petani/foto'); + } + $petani->update([...$validatedData, 'updated_by' => auth()->id()]); @@ -160,4 +193,33 @@ class PetaniController extends Controller { // } + + public function showImage(string $id, string $field) + { + if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { + abort(403); + } + + $petani = Petani::findOrFail($id); + + switch ($field) { + case 'ktp': + $filePath = $petani->path_ktp; + break; + case 'kk': + $filePath = $petani->path_kk; + break; + case 'foto': + $filePath = $petani->foto; + break; + default: + abort(404); + } + + if (!$filePath || !\Storage::exists($filePath)) { + abort(404); + } + + return Storage::disk('local')->response($filePath); + } } diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php index 13163e0..b4f0104 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php @@ -56,7 +56,7 @@ class PetaniLahanController extends Controller $petani = Petani::findOrFail($petaniId); $lahan = Lahan::where('petani_id', $petaniId) - ->orderBy('created_at', 'desc') + ->orderBy('id', 'asc') ->get(); $provinsi = Provinsi::orderBy('kode', 'asc')->get(); @@ -171,9 +171,6 @@ class PetaniLahanController extends Controller return view('produktivitas.petani.lahan.edit', compact('lahan', 'lahanSelected', 'petani', 'komoditas', 'provinsi')); } - /** - * Update the specified resource in storage. - */ public function update(Request $request, string $petaniId, string $id) { if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { diff --git a/resources/views/produktivitas/petani/add.blade.php b/resources/views/produktivitas/petani/add.blade.php index f070736..c42e23a 100644 --- a/resources/views/produktivitas/petani/add.blade.php +++ b/resources/views/produktivitas/petani/add.blade.php @@ -2,122 +2,196 @@ @section('content')
-
-
-
Tambah Petani Baru
-
+ @if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif +
-
-
- @csrf + + @include('produktivitas.petani.header', ['petani' => null]) - @if ($errors->any()) -
-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
Informasi Petani
-
-
- - - @error('nama')
{{ $message }}
@enderror -
-
- - - @error('jenis_kelamin')
{{ $message }}
@enderror -
-
- - - @error('tempat_lahir')
{{ $message }}
@enderror -
-
- - - @error('tanggal_lahir')
{{ $message }}
@enderror -
-
-
-
- - - @error('pendidikan_terakhir')
{{ $message }}
@enderror -
-
- - - @error('status_perkawinan')
{{ $message }}
@enderror -
-
-
-
- - - @error('alamat')
{{ $message }}
@enderror -
-
-
-
- - - @error('provinsi_id')
{{ $message }}
@enderror -
-
- - - @error('kabupaten_id')
{{ $message }}
@enderror -
-
- - - @error('kecamatan_id')
{{ $message }}
@enderror -
-
- - - @error('desa_kelurahan_id')
{{ $message }}
@enderror -
-
+
+
+ +
+
+ + + @csrf +
+
+
+
+ User avatar + +
+
+
-
- Kembali - +
+
Data Pribadi
+
+
+ + + @error('nama')
{{ $message }}
@enderror +
+
+ + + @error('ktp')
{{ $message }}
@enderror +
+
+ + + @error('kk')
{{ $message }}
@enderror +
+
+
+
+ + + @error('jenis_kelamin')
{{ $message }}
@enderror +
+
+ + + @error('tempat_lahir')
{{ $message }}
@enderror +
+
+ + + @error('tanggal_lahir')
{{ $message }}
@enderror +
+
+
+
+ + + @error('pendidikan_terakhir')
{{ $message }}
@enderror +
+
+ + + @error('status_perkawinan')
{{ $message }}
@enderror +
+
+ + +
Domisili dan Kontak
+
+
+ + + @error('alamat')
{{ $message }}
@enderror +
+
+
+
+ + + @error('provinsi_id')
{{ $message }}
@enderror +
+
+ + + @error('kabupaten_id')
{{ $message }}
@enderror +
+
+ + + @error('kecamatan_id')
{{ $message }}
@enderror +
+
+ + + @error('desa_kelurahan_id')
{{ $message }}
@enderror +
+
+
+
+ + + @error('nomor_telepon')
{{ $message }}
@enderror +
+
+ +
Berkas
+
+
+ + + @error('file_ktp')
{{ $message }}
@enderror +
+
+ + + @error('file_kk')
{{ $message }}
@enderror +
+
+
+ + +
+ +
+ +
+ +
- +
+
@endsection @@ -190,21 +264,39 @@ $('#addNewPetaniForm').validate({ rules: { nama: { required: true }, + ktp: { required: true, digits: true, minlength: 16, maxlength: 16 }, + kk: { required: false, digits: true, minlength: 16, maxlength: 16 }, + tempat_lahir: { required: true }, tanggal_lahir: { required: true, date: true }, jenis_kelamin: { required: true }, pendidikan_terakhir: { required: true }, alamat: { required: true }, + provinsi_id: { required: true }, + kabupaten_id: { required: true }, + kecamatan_id: { required: true }, desa_kelurahan_id: { required: true }, status_perkawinan: { required: true }, + file_ktp: { accept: "image/png, image/jpeg, image/jpg" }, + file_kk: { accept: "image/png, image/jpeg, image/jpg" }, + nomor_telepon: { required: false, digits: true, maxlength: 20 } }, messages: { nama: { required: "Nama petani wajib diisi" }, + ktp: { required: "NIK wajib diisi", digits: "NIK harus berupa angka", minlength: "NIK harus 16 digit", maxlength: "NIK harus 16 digit" }, + kk: { required: "No. KK wajib diisi", digits: "No. KK harus berupa angka", minlength: "No. KK harus 16 digit", maxlength: "No. KK harus 16 digit" }, + tempat_lahir: { required: "Tempat lahir wajib diisi" }, tanggal_lahir: { required: "Tanggal lahir wajib diisi", date: "Format tanggal salah" }, jenis_kelamin: { required: "Jenis kelamin wajib diisi" }, pendidikan_terakhir: { required: "Pendidikan terakhir wajib diisi" }, alamat: { required: "Alamat wajib diisi" }, + provinsi_id: { required: "Provinsi wajib diisi" }, + kabupaten_id: { required: "Kabupaten/Kota wajib diisi" }, + kecamatan_id: { required: "Kecamatan wajib diisi" }, desa_kelurahan_id: { required: "Desa/Kelurahan wajib diisi" }, status_perkawinan: { required: "Status perkawinan wajib diisi" }, + file_ktp: { accept: "Format file tidak valid. Harap unggah file berupa gambar (PNG, JPEG, JPG)" }, + file_kk: { accept: "Format file tidak valid. Harap unggah file berupa gambar (PNG, JPEG, JPG)" }, + nomor_telepon: { digits: "Nomor telepon harus berupa angka", maxlength: "Nomor telepon maksimal 20 digit" } }, errorElement: 'div', errorPlacement: function (error, element) { diff --git a/resources/views/produktivitas/petani/edit.blade.php b/resources/views/produktivitas/petani/edit.blade.php index b863876..2848cba 100644 --- a/resources/views/produktivitas/petani/edit.blade.php +++ b/resources/views/produktivitas/petani/edit.blade.php @@ -12,118 +12,206 @@
@endif -
- - + @include('produktivitas.petani.header', ['petani' => $petani]) +
- @include('produktivitas.petani.header', ['petani' => $petani]) -
-
Data Pribadi
+
+ @csrf + @method('PUT')
-
- - - @error('nama')
{{ $message }}
@enderror +
+
+
+ User avatar + +
+
-
- - - @error('jenis_kelamin')
{{ $message }}
@enderror -
-
- - - @error('tempat_lahir')
{{ $message }}
@enderror -
-
- - - @error('tanggal_lahir')
{{ $message }}
@enderror + +
+
Data Pribadi
+
+
+ + + @error('nama')
{{ $message }}
@enderror +
+
+ + + @error('ktp')
{{ $message }}
@enderror +
+
+ + + @error('kk')
{{ $message }}
@enderror +
+
+
+
+ + + @error('jenis_kelamin')
{{ $message }}
@enderror +
+
+ + + @error('tempat_lahir')
{{ $message }}
@enderror +
+
+ + + @error('tanggal_lahir')
{{ $message }}
@enderror +
+
+
+
+ + + @error('pendidikan_terakhir')
{{ $message }}
@enderror +
+
+ + + @error('status_perkawinan')
{{ $message }}
@enderror +
+
+ + +
Domisili dan Kontak
+
+
+ + + @error('alamat')
{{ $message }}
@enderror +
+
+
+
+ + + @error('provinsi_id')
{{ $message }}
@enderror +
+
+ + + @error('kabupaten_id')
{{ $message }}
@enderror +
+
+ + + @error('kecamatan_id')
{{ $message }}
@enderror +
+
+ + + @error('desa_kelurahan_id')
{{ $message }}
@enderror +
+
+
+
+ + + @error('nomor_telepon')
{{ $message }}
@enderror +
+
+ +
Berkas
+
+
+ + + @if($petani->file_ktp) +
+ +
+ + + File saat ini: + {{ $petani->file_ktp }} + + @endif + @error('file_ktp')
{{ $message }}
@enderror +
+
+ + + @if($petani->file_kk) +
+ +
+ + + File saat ini: + {{ $petani->file_kk }} + + @endif + @error('file_kk')
{{ $message }}
@enderror +
+
+
-
-
- - - @error('pendidikan_terakhir')
{{ $message }}
@enderror -
-
- - - @error('status_perkawinan')
{{ $message }}
@enderror -
-
-
Alamat
-
-
- - - @error('alamat')
{{ $message }}
@enderror -
-
-
-
- - - @error('provinsi_id')
{{ $message }}
@enderror -
-
- - - @error('kabupaten_id')
{{ $message }}
@enderror -
-
- - - @error('kecamatan_id')
{{ $message }}
@enderror -
-
- - - @error('desa_kelurahan_id')
{{ $message }}
@enderror -
-
- +
+ +
@@ -201,21 +289,40 @@ $('#editPetaniForm').validate({ rules: { nama: { required: true }, + ktp: { required: true, digits: true, minlength: 16, maxlength: 16 }, + kk: { required: true, digits: true, minlength: 16, maxlength: 16 }, + tempat_lahir: { required: true }, tanggal_lahir: { required: true, date: true }, jenis_kelamin: { required: true }, pendidikan_terakhir: { required: true }, alamat: { required: true }, + provinsi_id: { required: true }, + kabupaten_id: { required: true }, + kecamatan_id: { required: true }, desa_kelurahan_id: { required: true }, status_perkawinan: { required: true }, + file_ktp: { accept: "image/png, image/jpeg, image/jpg" }, + file_kk: { accept: "image/png, image/jpeg, image/jpg" }, + nomor_telepon: { required: false, digits: true, maxlength: 20 } }, messages: { nama: { required: "Nama petani wajib diisi" }, + ktp: { required: "NIK wajib diisi", digits: "NIK harus berupa angka", minlength: "NIK harus 16 digit", maxlength: "NIK harus 16 digit" }, + kk: { required: "No. KK wajib diisi", digits: "No. KK harus berupa angka", minlength: "No. KK harus 16 digit", maxlength: "No. KK harus 16 digit" }, + tempat_lahir: { required: "Tempat lahir wajib diisi" }, tanggal_lahir: { required: "Tanggal lahir wajib diisi", date: "Format tanggal salah" }, jenis_kelamin: { required: "Jenis kelamin wajib diisi" }, pendidikan_terakhir: { required: "Pendidikan terakhir wajib diisi" }, alamat: { required: "Alamat wajib diisi" }, + provinsi_id: { required: "Provinsi wajib diisi" }, + kabupaten_id: { required: "Kabupaten/Kota wajib diisi" }, + kecamatan_id: { required: "Kecamatan wajib diisi" }, desa_kelurahan_id: { required: "Desa/Kelurahan wajib diisi" }, status_perkawinan: { required: "Status perkawinan wajib diisi" }, + file_ktp: { accept: "Format file tidak valid. Harap unggah file berupa gambar (PNG, JPEG, JPG)" }, + file_kk: { accept: "Format file tidak valid. Harap unggah file berupa gambar (PNG, JPEG, JPG)" }, + nomor_telepon: { digits: "Nomor telepon harus berupa angka", maxlength: "Nomor telepon maksimal 20 digit" } + }, errorElement: 'div', errorPlacement: function (error, element) { diff --git a/resources/views/produktivitas/petani/header.blade.php b/resources/views/produktivitas/petani/header.blade.php index 38cb394..7a55efd 100644 --- a/resources/views/produktivitas/petani/header.blade.php +++ b/resources/views/produktivitas/petani/header.blade.php @@ -1,65 +1,184 @@ -
-
-
-
-
-
- User avatar - +
+
+
+
+
Profil Petani
+
+
+
+
+ Avatar +
+
+
{{ $petani ? $petani->nama : 'Tambah Petani Baru' }}
+ {{ $petani ? ($petani->jenis_kelamin == 1 ? 'Laki-laki' : 'Perempuan') : 'Jenis Kelamin' }} + Komoditas: {{ $petani ? $petani->komoditas?->nama : 'Komoditas' }}
-
-
-
-
- +
Domisili
+

Alamat: {{ $petani ? $petani->alamat : 'Alamat' }}

+

{{ $petani ? $petani->desaKelurahan->nama : 'Desa/Kelurahan' }}, {{ $petani ? $petani->desaKelurahan->kecamatan->nama : 'Kecamatan' }}, {{ $petani ? $petani->desaKelurahan->kecamatan->kabupatenKota->nama : 'Kabupaten/Kota' }}, {{ $petani ? $petani->desaKelurahan->kecamatan->kabupatenKota->provinsi->nama : 'Provinsi' }}

+
+
+
+
+
+
+
+
+
+
+
+

In-store Sales

+

$5,345.43

+

+ 5k orders+5.7% +

+
+ + + + +
+
-
-
1.23k
- Task Done -
-
-
-
-
- +
+
+
+

In-store Sales

+

$5,345.43

+

+ 5k orders+5.7% +

+
+ + + + +
+
-
-
568
- Project Done +
+
+
+

In-store Sales

+

$5,345.43

+

+ 5k orders+5.7% +

+
+ + + + + +
+
-
-
Profil Petani
-
-
    -
  • Nama: {{ $petani->nama }}
  • -
  • Jenis Kelamin: {{ $petani->jenis_kelamin == 1 ? 'Laki-laki' : 'Perempuan' }}
  • -
  • Alamat: {{ $petani->alamat }}, - {{ $petani->desaKelurahan?->nama }}, - {{ $petani->desaKelurahan?->kecamatan->nama }}, - {{ $petani->desaKelurahan?->kecamatan->kabupatenKota->nama }}, - {{ $petani->desaKelurahan?->kecamatan->kabupatenKota->provinsi->nama }}
  • -
+ +
+
+
+
+
+
+
+
+

In-store Sales

+

$5,345.43

+

+ 5k orders+5.7% +

+
+ + + + + +
+
+
+
+
+
+

In-store Sales

+

$5,345.43

+

+ 5k orders+5.7% +

+
+ + + + + +
+
+
+
+
+
+

In-store Sales

+

$5,345.43

+

+ 5k orders+5.7% +

+
+ + + + + +
+
+
+
-
+
diff --git a/resources/views/produktivitas/petani/lahan/add.blade.php b/resources/views/produktivitas/petani/lahan/add.blade.php index 7365af1..558b84b 100644 --- a/resources/views/produktivitas/petani/lahan/add.blade.php +++ b/resources/views/produktivitas/petani/lahan/add.blade.php @@ -33,61 +33,45 @@
@include('produktivitas.petani.header', ['petani' => $petani]) - +
-
-
- -
-
+ @include('produktivitas.petani.lahan.sidebar', ['petani' => $petani, 'lahan' => $lahan])
-
+ @csrf
-
+
Data Lahan dan Tanaman
-
+
@error('luas_lahan')
{{ $message }}
@enderror
-
+
@error('umur_lahan')
{{ $message }}
@enderror
-
-
-
+
@error('jumlah_tanaman')
{{ $message }}
@enderror
-
+
+ + + @error('umur_tanaman')
{{ $message }}
@enderror +
+
+
+
@error('komoditas_id')
{{ $message }}
@enderror
-
-
-
+
@error('jenis_komoditas_id')
{{ $message }}
@enderror
-
+
@error('varietas_id')
{{ $message }}
@enderror
-
-
- - - @error('umur_tanaman')
{{ $message }}
@enderror -
-
-
- -
+
+
@error('kondisi_tanaman')
{{ $message }}
@enderror
-
+
+ @error('serangan_hama')
{{ $message }}
@enderror
-
-
-
+
-
+
-
+
Data Lahan dan Komoditas
-
+
@error('luas_lahan')
{{ $message }}
@enderror
+
+ + + @error('umur_lahan')
{{ $message }}
@enderror +
+
+ + + @error('jumlah_tanaman')
{{ $message }}
@enderror +
+
+ + + @error('umur_tanaman')
{{ $message }}
@enderror +
-
+
@error('komoditas_id')
{{ $message }}
@enderror
-
+
@error('jenis_komoditas_id')
{{ $message }}
@enderror
-
-
-
+
@error('varietas_id')
{{ $message }}
@enderror
-
- - - @error('jumlah_tanaman')
{{ $message }}
@enderror -
-
+
+
+ + + @error('kondisi_tanaman')
{{ $message }}
@enderror +
+
+ + + @error('serangan_hama')
{{ $message }}
@enderror +
+
+ + +
+
+ + + @error('keparahan_serangan')
{{ $message }}
@enderror +
+
+ +
+
+
+
Lokasi
@@ -170,7 +204,6 @@
-
Peta Lahan
diff --git a/resources/views/produktivitas/petani/lahan/index.blade.php b/resources/views/produktivitas/petani/lahan/index.blade.php index b9196d8..8cff821 100644 --- a/resources/views/produktivitas/petani/lahan/index.blade.php +++ b/resources/views/produktivitas/petani/lahan/index.blade.php @@ -22,31 +22,7 @@
-
-
- -
-
- - @if($lahan->count() > 0) - @endif + @include('produktivitas.petani.lahan.sidebar', ['petani' => $petani, 'lahan' => $lahan])
diff --git a/resources/views/produktivitas/petani/lahan/sidebar.blade.php b/resources/views/produktivitas/petani/lahan/sidebar.blade.php new file mode 100644 index 0000000..4e0aa83 --- /dev/null +++ b/resources/views/produktivitas/petani/lahan/sidebar.blade.php @@ -0,0 +1,23 @@ +
+
+ +
+
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 8ca39fb..c9e9466 100644 --- a/routes/web.php +++ b/routes/web.php @@ -188,6 +188,7 @@ Route::middleware('auth') // Petani Route::resource('petani', App\Http\Controllers\Web\Produktivitas\PetaniController::class); + Route::get('petani/show-image/{id}/{field}', [App\Http\Controllers\Web\Produktivitas\PetaniController::class, 'showImage'])->name('petani.show-image'); Route::resource('sosial-ekonomi', App\Http\Controllers\Web\Produktivitas\SosialEkonomiController::class)->except(['create', 'edit']); Route::get('petani/{petani}/akses-pasar', [App\Http\Controllers\Web\Produktivitas\AksesPasarController::class, 'editByPetani'])->name('petani.akses-pasar.edit'); Route::resource('akses-pasar', App\Http\Controllers\Web\Produktivitas\AksesPasarController::class)->except(['create', 'edit']);