paginate(10); return view('admin.banners.index', compact('banners')); } public function create() { return view('admin.banners.create'); } public function store(Request $request) { $request->validate([ 'title' => 'required|string|max:255', 'image' => 'required|image|max:2048|mimes:jpeg,png,jpg,gif,webp', 'link' => 'nullable|string|max:500|regex:/^https?:\/\/.+\..+$/i', 'button_text' => 'nullable|string|max:50', 'order' => 'required|integer', 'active' => 'required|boolean', ], [ 'image.mimes' => 'A imagem deve ser do tipo: JPEG, PNG, JPG, GIF ou WebP.', 'link.regex' => 'O link deve começar com http:// ou https:// e ter um formato válido.', ]); $data = $request->all(); if ($request->hasFile('image')) { $data['image'] = $request->file('image')->store('banners', 'public'); } Banner::create($data); return redirect()->route('admin.marketing.banners.index')->with('success', 'Banner criado com sucesso.'); } public function edit(Banner $banner) { return view('admin.banners.edit', compact('banner')); } public function update(Request $request, Banner $banner) { $request->validate([ 'title' => 'required|string|max:255', 'image' => 'nullable|image|max:2048|mimes:jpeg,png,jpg,gif,webp', 'link' => 'nullable|string|max:500|regex:/^https?:\/\/.+\..+$/i', 'button_text' => 'nullable|string|max:50', 'order' => 'required|integer', 'active' => 'required|boolean', ], [ 'image.mimes' => 'A imagem deve ser do tipo: JPEG, PNG, JPG, GIF ou WebP.', 'link.regex' => 'O link deve começar com http:// ou https:// e ter um formato válido.', ]); $data = $request->all(); if ($request->hasFile('image')) { if ($banner->image) { Storage::disk('public')->delete($banner->image); } $data['image'] = $request->file('image')->store('banners', 'public'); } $banner->update($data); return redirect()->route('admin.marketing.banners.index')->with('success', 'Banner atualizado com sucesso.'); } public function destroy(Banner $banner) { if ($banner->image) { Storage::disk('public')->delete($banner->image); } $banner->delete(); return redirect()->route('admin.marketing.banners.index')->with('success', 'Banner excluído com sucesso.'); } }