Как можно удалить файл при обновлении информации?

Как можно оптимизировать метод обновления пользователя в контроллере UserController так, чтобы в случае удаления изображения происходила манипуляция с сохраненным файлом? Как можно проверять наличие загруженного изображения перед обновлением пользователя, чтобы избежать сохранения старого файла, учитывая выражение $avatar ?? $user->avatar?
  • 9 мая 2024 г. 18:30
Ответы на вопрос 2
Для удаления файла при обновлении информации можно использовать следующий подход:

1. Проверить, было ли передано новое изображение при обновлении пользователя.
2. Если новое изображение было передано, удалить старый файл изображения.
3. Сохранить новое изображение.

Чтобы оптимизировать метод обновления пользователя в контроллере UserController, можно добавить следующий код:

```php
public function update(Request $request, User $user)
{
    $validatedData = $request->validate([
        'name' => 'required|string',
        'email' => 'required|email',
        'avatar' => 'image|mimes:jpeg,png,jpg,gif|max:2048'
    ]);

    if ($request->hasFile('avatar')) {
        if ($user->avatar) {
             Storage::delete($user->avatar); // Удалить старый файл изображения
        }

        $avatar = $request->file('avatar')->store('avatars'); // Сохранить новое изображение
    }

    $user->name = $validatedData['name'];
    $user->email = $validatedData['email'];
    $user->avatar = $avatar ?? $user->avatar;

    $user->save();

    return response()->json($user);
}
```

Этот код оптимизирует метод обновления пользователя, удаляя старый файл изображения при обновлении и сохраняя новый файл, если он был передан.

Чтобы проверить наличие загруженного изображения перед обновлением пользователя и избежать сохранения старого файла, можно использовать выражение `$avatar ?? $user->avatar` в коде выше. Это выражение означает, что будет использовано новое изображение (если оно было передано), или будет использовано старое изображение пользователя. Таким образом, можно избежать сохранения старого файла, если новое изображение не было передано.
Вам нужно с фронтенда присылать какой-то флаг, который будет говорить о том, что аватар был удалён. И уже по этому флагу вы будете удалять файл из профиля.
Похожие вопросы