'nullable|image|max:2048', // 2MB Max ]; public function mount($fieldName = 'photo', $currentImage = null, $placeholder = null) { $this->fieldName = $fieldName; $this->currentImage = $currentImage; $this->placeholder = $placeholder ?? asset('images/default-avatar.png'); } public function updatedPhoto() { $this->validate([ 'photo' => 'image|max:2048', // 2MB Max ]); } public function removePhoto() { $this->photo = null; $this->currentImage = null; } public function save() { $this->validate(); if ($this->photo) { $path = $this->photo->store($this->storagePath); if ($this->model) { // Eliminar imagen anterior si existe if ($this->model->{$this->fieldName}) { Storage::delete($this->model->{$this->fieldName}); } $this->model->{$this->fieldName} = $path; $this->model->save(); } $this->currentUrl = Storage::url($path); $this->showSavedMessage = true; $this->photo = null; // Limpiar el input de subida } } protected function getCurrentImageUrl() { if ($this->model && $this->model->{$this->fieldName}) { return Storage::url($this->model->{$this->fieldName}); } return $this->placeholder; } public function render() { return view('livewire.image-uploader'); } }