add AdminRequest for improved validation and structure in ManajemenAdminController
This commit is contained in:
parent
6ecc2a4ccd
commit
39ba315f0a
|
|
@ -4,14 +4,11 @@
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Http\Request;
|
use App\Http\Requests\Admin\AdminRequest; // Panggil Request Baru
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\{Auth, Hash};
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Routing\Controllers\{HasMiddleware, Middleware};
|
||||||
use Illuminate\Support\Facades\Validator; // <--- WAJIB ADA INI
|
|
||||||
use Illuminate\Routing\Controllers\HasMiddleware;
|
|
||||||
use Illuminate\Routing\Controllers\Middleware;
|
|
||||||
|
|
||||||
class ManajemenAdminController extends Controller
|
class ManajemenAdminController extends Controller implements HasMiddleware
|
||||||
{
|
{
|
||||||
public static function middleware(): array
|
public static function middleware(): array
|
||||||
{
|
{
|
||||||
|
|
@ -24,112 +21,38 @@ public static function middleware(): array
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$admin = User::where('role', '!=', 'pemilik')
|
$admin = User::where('role', '!=', 'pemilik')->latest()->get();
|
||||||
->latest()
|
|
||||||
->get();
|
|
||||||
return view('admin.kelola-admin.index', compact('admin'));
|
return view('admin.kelola-admin.index', compact('admin'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function store(Request $request)
|
public function store(AdminRequest $request)
|
||||||
{
|
{
|
||||||
$validator = Validator::make($request->all(), [
|
$data = $request->validated();
|
||||||
'nama' => 'required|string|min:5|max:100',
|
$data['password'] = Hash::make($request->username);
|
||||||
'username' => 'required|string|alpha_dash|max:50|unique:users,username',
|
User::create($data);
|
||||||
'email' => 'required|email:dns|max:255|unique:users,email,',
|
|
||||||
'no_wa' => 'required|numeric|digits_between:10,15',
|
|
||||||
'role' => 'required|in:admin_foto,admin_buket',
|
|
||||||
'alamat' => 'required|string|max:255',
|
|
||||||
], [
|
|
||||||
'required' => 'Kolom :attribute wajib diisi.',
|
|
||||||
'unique' => ':attribute sudah terdaftar di sistem, gunakan yang lain.',
|
|
||||||
'min' => ':attribute minimal harus berisi :min karakter.',
|
|
||||||
'max' => ':attribute maksimal hanya boleh :max karakter.',
|
|
||||||
'numeric' => ':attribute harus berupa angka.',
|
|
||||||
'digits_between' => ':attribute harus berjumlah antara :min sampai :max digit.',
|
|
||||||
'email' => 'Format :attribute tidak valid.',
|
|
||||||
'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _',
|
|
||||||
'in' => ':attribute yang dipilih tidak sesuai dengan pilihan yang tersedia.',
|
|
||||||
], [
|
|
||||||
'nama' => 'nama lengkap',
|
|
||||||
'username' => 'username',
|
|
||||||
'email' => 'alamat email',
|
|
||||||
'no_wa' => 'nomor WA',
|
|
||||||
'role' => 'peran admin',
|
|
||||||
'alamat' => 'alamat lengkap',
|
|
||||||
]);
|
|
||||||
if ($validator->fails()) {
|
|
||||||
return redirect()->back()
|
|
||||||
->withErrors($validator)
|
|
||||||
->withInput()
|
|
||||||
->with('error_modal', 'create');
|
|
||||||
}
|
|
||||||
User::create([
|
|
||||||
'nama' => $request->nama,
|
|
||||||
'username' => $request->username,
|
|
||||||
'email' => $request->email,
|
|
||||||
'no_wa' => $request->no_wa,
|
|
||||||
'role' => $request->role,
|
|
||||||
'alamat' => $request->alamat,
|
|
||||||
'password' => Hash::make($request->username),
|
|
||||||
]);
|
|
||||||
return redirect()->back()->with('success', 'Admin berhasil ditambahkan!');
|
return redirect()->back()->with('success', 'Admin berhasil ditambahkan!');
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Bagian UPDATE ---
|
public function update(AdminRequest $request, string $id)
|
||||||
public function update(Request $request, string $id)
|
|
||||||
{
|
{
|
||||||
$admin = User::findOrFail($id);
|
$admin = User::findOrFail($id);
|
||||||
$validator = Validator::make($request->all(), [
|
$admin->update($request->validated());
|
||||||
'nama' => 'required|string|min:5|max:100',
|
|
||||||
'username' => 'required|string|alpha_dash|max:50|unique:users,username,' . $id . ',id_user',
|
|
||||||
'email' => 'required|email:dns|max:255|unique:users,email,' . $id . ',id_user',
|
|
||||||
'no_wa' => 'required|numeric|digits_between:10,15',
|
|
||||||
'role' => 'required|in:admin_foto,admin_buket',
|
|
||||||
'alamat' => 'required|string|max:255',
|
|
||||||
], [
|
|
||||||
'required' => 'Kolom :attribute wajib diisi.',
|
|
||||||
'unique' => ':attribute sudah terdaftar di sistem, gunakan yang lain.',
|
|
||||||
'min' => ':attribute minimal harus berisi :min karakter.',
|
|
||||||
'max' => ':attribute maksimal hanya boleh :max karakter.',
|
|
||||||
'numeric' => ':attribute harus berupa angka.',
|
|
||||||
'digits_between' => ':attribute harus berjumlah antara :min sampai :max digit.',
|
|
||||||
'email' => 'Format :attribute tidak valid.',
|
|
||||||
'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _',
|
|
||||||
'in' => ':attribute yang dipilih tidak sesuai dengan pilihan yang tersedia.',
|
|
||||||
], [
|
|
||||||
'nama' => 'nama lengkap',
|
|
||||||
'username' => 'username',
|
|
||||||
'email' => 'alamat email',
|
|
||||||
'no_wa' => 'nomor WA',
|
|
||||||
'role' => 'peran admin',
|
|
||||||
'alamat' => 'alamat lengkap',
|
|
||||||
]);
|
|
||||||
if ($validator->fails()) {
|
|
||||||
return redirect()->back()
|
|
||||||
->withErrors($validator)
|
|
||||||
->withInput()
|
|
||||||
->with('error_id', $id);
|
|
||||||
}
|
|
||||||
$admin->update($request->only(['nama', 'username', 'email', 'no_wa', 'role', 'alamat']));
|
|
||||||
return redirect()->back()->with('success', 'Data berhasil diperbarui!');
|
return redirect()->back()->with('success', 'Data berhasil diperbarui!');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroy(string $id)
|
public function destroy(string $id)
|
||||||
{
|
{
|
||||||
// 1. Cari data admin berdasarkan ID
|
|
||||||
$admin = User::findOrFail($id);
|
$admin = User::findOrFail($id);
|
||||||
|
|
||||||
// 2. Keamanan tambahan: Jangan biarkan admin menghapus dirinya sendiri (opsional)
|
|
||||||
if (Auth::id() == $admin->id_user) {
|
if (Auth::id() == $admin->id_user) {
|
||||||
return redirect()->back()->with('error', 'Anda tidak bisa menghapus akun sendiri!');
|
return redirect()->back()->with('error', 'Anda tidak bisa menghapus akun sendiri!');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Eksekusi hapus
|
|
||||||
$admin->delete();
|
$admin->delete();
|
||||||
|
|
||||||
// 4. Kembali dengan pesan sukses
|
|
||||||
return redirect()->route('admin.kelola-admin.index')
|
return redirect()->route('admin.kelola-admin.index')
|
||||||
->with('success', 'Admin berhasil dihapus secara permanen.');
|
->with('success', 'Admin berhasil dihapus secara permanen.');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Admin;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Contracts\Validation\Validator;
|
||||||
|
use Illuminate\Http\Exceptions\HttpResponseException;
|
||||||
|
|
||||||
|
class AdminRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
// Pastikan ini true agar request diproses
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
// Mengambil ID dari route untuk pengecualian 'unique' saat update
|
||||||
|
$adminId = $this->route('id');
|
||||||
|
|
||||||
|
return [
|
||||||
|
'nama' => 'required|string|min:5|max:100',
|
||||||
|
'username' => 'required|string|alpha_dash|max:50|unique:users,username,' . $adminId . ',id_user',
|
||||||
|
'email' => 'required|email:dns|max:255|unique:users,email,' . $adminId . ',id_user',
|
||||||
|
'no_wa' => 'required|numeric|digits_between:10,15',
|
||||||
|
'role' => 'required|in:admin_foto,admin_buket',
|
||||||
|
'alamat' => 'required|string|max:255',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function messages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'required' => 'Kolom :attribute wajib diisi.',
|
||||||
|
'unique' => ':attribute sudah terdaftar di sistem, gunakan yang lain.',
|
||||||
|
'min' => ':attribute minimal harus berisi :min karakter.',
|
||||||
|
'max' => ':attribute maksimal hanya boleh :max karakter.',
|
||||||
|
'numeric' => ':attribute harus berupa angka.',
|
||||||
|
'digits_between' => ':attribute harus berjumlah antara :min sampai :max digit.',
|
||||||
|
'email' => 'Format :attribute tidak valid.',
|
||||||
|
'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _',
|
||||||
|
'in' => ':attribute yang dipilih tidak sesuai pilihan yang tersedia.',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function attributes(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'nama' => 'nama lengkap',
|
||||||
|
'username' => 'username',
|
||||||
|
'email' => 'alamat email',
|
||||||
|
'no_wa' => 'nomor WA',
|
||||||
|
'role' => 'peran admin',
|
||||||
|
'alamat' => 'alamat lengkap',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Penanganan khusus agar Modal tetap terbuka saat validasi gagal.
|
||||||
|
*/
|
||||||
|
protected function failedValidation(Validator $validator)
|
||||||
|
{
|
||||||
|
$redirect = redirect()->back()->withErrors($validator)->withInput();
|
||||||
|
|
||||||
|
if ($this->isMethod('post')) {
|
||||||
|
$redirect->with('error_modal', 'create');
|
||||||
|
} else {
|
||||||
|
$redirect->with('error_id', $this->route('id'));
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new HttpResponseException($redirect);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue