Есть такой метод: (/App\Http\Controllers\Admin\UserController)
public function update(UpdateUserRequest $request, User $user): RedirectResponse
{
$data = $request->only(['name', 'domain', 'email']);
if ($request->hasFile('avatar')) {
$deleteImage = new DeleteImageAction();
$deleteImage->handle($user->avatar);
$avatar = $request->file('avatar')->store(date('Y-m-d'));
}
if ($request->input('status') !== 'on') {
$status = false;
}
$this->user->update($user, array_merge($data, [
'avatar' => $avatar ?? $user->avatar,
'password' => Hash::make($request->input('password')),
'status' => $status ?? true
]), $request->role);
session()->flash('success',
(new FlashNotificationsAction())->handle('user.update')
);
return redirect()->action([self::class, 'index']);
}
И универсальный экшен: (App\Actions\DeleteImageAction)
final class DeleteImageAction
{
public function handle($image)
{
if (isset($image) && File::exists(Storage::path($image))) {
return (Storage::disk('public'))->delete($image);
}
return null;
}
}
Загружаю и устанавливаю картинку, но если удаляю картинку и сохраняю данные пользователя, то сохраняется ранее загруженная картинка. Оно и очевидно, т. к. стоит $avatar ?? $user->avatar.
Как можно проверить, что картинка не загружена, поэтому ее нужно удалить? Но опять же, если картинка остается прежней, то ее не нужно удалять.
Может дело в Dropify? Не знаю, в JS не шарю, поэтому может и по другому как-то можно это сделать?
<input type="file" id="avatar" name="avatar" class="dropify @error('avatar') is-invalid @enderror" data-default-file="{{ Storage::url($user->avatar) }}" data-allowed-file-extensions="jpg jpeg png svg gif">