search; $informasi = Informasi::when($search, function ($query) use ($search) { $query->where('judul_informasi', 'like', '%' . $search . '%'); }) ->orderBy('tanggal_informasi', 'desc') ->paginate(10); return view('admin.informasi.index', compact('informasi')); } public function create() { return view('admin.informasi.create'); } // ================= VALIDASI ================= private function rules() { return [ 'kategori_informasi' => 'required|in:berita,pengumuman', 'judul_informasi' => 'required|string|max:255', 'isi_informasi' => 'required|string|min:10', 'tanggal_informasi' => 'required|date', 'gambar_informasi' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', ]; } private function messages() { return [ 'required' => ':attribute wajib diisi.', 'in' => ':attribute tidak valid.', 'string' => ':attribute harus berupa teks.', 'max' => ':attribute maksimal :max karakter.', 'min' => ':attribute minimal :min karakter.', 'date' => ':attribute harus berupa tanggal yang valid.', 'image' => ':attribute harus berupa gambar.', 'mimes' => ':attribute harus berformat jpeg, jpg, atau png.', ]; } private function attributes() { return [ 'kategori_informasi' => 'Kategori Informasi', 'judul_informasi' => 'Judul Informasi', 'isi_informasi' => 'Isi Informasi', 'tanggal_informasi' => 'Tanggal Informasi', 'gambar_informasi' => 'Gambar Informasi', ]; } // ================= STORE ================= public function store(Request $request) { $request->validate( $this->rules(), $this->messages(), $this->attributes() ); $data = $request->only( 'kategori_informasi', 'judul_informasi', 'isi_informasi', 'tanggal_informasi' ); if ($request->hasFile('gambar_informasi')) { $data['gambar_informasi'] = $request->file('gambar_informasi') ->store('informasi', 'public'); } Informasi::create($data); return redirect()->route('admin.informasi.index') ->with('success', 'Informasi berhasil ditambahkan.'); } // ================= EDIT ================= public function edit($id_informasi) { $informasi = Informasi::findOrFail($id_informasi); return view('admin.informasi.edit', compact('informasi')); } // ================= UPDATE ================= public function update(Request $request, $id_informasi) { $informasi = Informasi::findOrFail($id_informasi); $request->validate( $this->rules(), $this->messages(), $this->attributes() ); $data = $request->only( 'kategori_informasi', 'judul_informasi', 'isi_informasi', 'tanggal_informasi' ); if ($request->hasFile('gambar_informasi')) { if ($informasi->gambar_informasi) { Storage::disk('public')->delete($informasi->gambar_informasi); } $data['gambar_informasi'] = $request->file('gambar_informasi') ->store('informasi', 'public'); } $informasi->update($data); return redirect()->route('admin.informasi.index') ->with('success', 'Informasi berhasil diperbarui.'); } // ================= DELETE ================= public function destroy($id_informasi) { $informasi = Informasi::findOrFail($id_informasi); if ($informasi->gambar_informasi) { Storage::disk('public')->delete($informasi->gambar_informasi); } $informasi->delete(); return redirect()->route('admin.informasi.index') ->with('success', 'Informasi berhasil dihapus.'); } }