#php #laravel
#php #laravel
Вопрос:
Я разрабатываю загрузку фотографий с использованием Laravel 7. Вот код:
public function updateProfilePic(Request $request)
{
$request->validate([
'photo' => 'file|image|max:2048',
]);
if (auth()->user()->photo != 'storage/default-pfp.png') {
$old_photo = str_replace('storage/', '', auth()->user()->photo);
try {
unlink('storage/' . $old_photo);
} catch (Exception $t) {
// does nothing
}
}
$path = $request->file('photo')->store('public/profile-pics');
$res = $this->user->where('email', auth()->user()->email)->update([
'photo' => str_replace('public/', 'storage/', $path),
]);
if ($res) {
return redirect('painel-default');
} else {
return redirect('/');
}
}
Это отлично работает на моем компьютере. Загруженный файл отправляется в хранилище / app / public /profile-pics. Но, когда этот код запускается на компьютере моего коллеги, он отправляется в хранилище / приложение / общедоступный / public /profile-pics. Кроме того, другой мой коллега использовал его, чтобы получить тот же результат, что и у меня на его компьютере. Однако, из ниоткуда, он получает это: хранилище / приложение / общедоступный / public /profile-pics. Мы запускаем разные версии php 7.4.5, 7.4.8 и 7.4.3 соответственно, но, похоже, это не проблема. Кто-нибудь может помочь мне выяснить, почему это происходит?
Комментарии:
1. Вы уже используете фреймворк, чтобы избежать перезаписи множества вещей. Почему бы не использовать все это? laravel.com/docs/7.x/filesystem
2. Я совсем новичок в Laravel. Вы имеете в виду, что я должен использовать этот помощник по ресурсам, чтобы получить каталог файлов?
3. Точно. Используйте конфигурацию и функции фасада хранилища.
4. Что такое
$this->user
? Это не ответ на ваш вопрос, однако, похоже, что вы загружаете пользователя из базы данных с$this->user
использованием уже загруженного пользователяauth()->user()
. Если это так, то вы можете просто сделатьauth()->user()->update([...])
.5. Rwd, это модель пользователя. Я не знал, что смогу сделать это таким образом. Спасибо.