|string> */ public function rules(): array { $rules = [ 'title' => ['required' , 'max:200'], 'content' => ['required'], 'link' => ['nullable', 'url'], 'tag' => ['nullable'], 'category' => ['required', 'in:0,1'], 'image' => ['nullable', 'image', 'mimes:png,jpg,jpeg', 'max:2048'], 'slug' => ['required'], 'author_id' => ['required'], ]; return $rules; } public function messages(): array { return [ 'title.required' => 'Judul harus diisi.', 'title.max' => 'Judul tidak boleh lebih dari 200 karakter.', 'content.required' => 'Konten harus diisi.', 'link.url' => 'Harus link valid.', 'category.required' => 'Kategori harus dipilih.', 'category.in' => 'Kategori harus bernilai berita atau pengumuman.', 'image.required' => 'Gambar wajib diunggah.', 'image.image' => 'File yang diunggah harus berupa gambar.', 'image.mimes' => 'Format gambar yang diperbolehkan adalah PNG, JPG, atau JPEG.', 'image.max' => 'Ukuran gambar tidak boleh lebih dari 4MB.', ]; } protected function prepareForValidation() { $this->merge([ 'slug' => filled($this->title) ? Str::slug($this->title) : null, 'author_id' => Auth::check() ? Auth::id() : null, ]); } }