#laravel #jetstream
#laravel #jetstream
Вопрос:
Laravel 8 и jetstream, это действительно что-то новое?
Я просто попытался установить и воспроизвести его в fortify, но я не могу понять, почему на моей фотографии профиля не отображается изображение.
обновить-профиль-информация-форма
<!-- Current Profile Photo -->
<div class="mt-2" x-show="! photoPreview">
<img src="{{ $this->user->profile_photo_url }}"
alt="{{ $this->user->name }}"
class="rounded-full h-20 w-20 object-cover">
</div>
.Env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:6IJbdi QYczKeLT7yOw3OgPsHucXn1KxVUb27hTQKpU=
APP_DEBUG=true
APP_URL=http://127.0.0.1:8000
конфигурация / файловые системы
'public' => [
'driver' => 'local',
'root' => storage_path('/public/storage'),
'url' => env('APP_URL').'/public/storage/',
'visibility' => 'public',
],
Ответ №1:
Ваша проблема заключалась в настройке APP_URL по умолчанию в файле .env:
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:6IJbdi QYczKeLT7yOw3OgPsHucXn1KxVUb27hTQKpU=
APP_DEBUG=true
APP_URL=http://localhost
Команда artisan serve запустила приложение на http://127.0.0.1:8000 , таким образом, вы соответствующим образом изменили APP_URL:
APP_URL=http://127.0.0.1:8000
Я бы не рекомендовал это.Иногда по разным причинам команда может изменить порт на 8001, 8002 и т.д.
$ php artisan serve
Starting Laravel development server: http://127.0.0.1:8000
Failed to listen on 127.0.0.1:8000 (reason: Address already in use)
Starting Laravel development server: http://127.0.0.1:8001
PHP 7.4.12 Development Server (http://127.0.0.1:8001) started
Простое решение
Просто прокомментируйте или оставьте APP_URL в вашем файле .env пустым:
#APP_URL=http://localhost
APP_URL=
Это приведет к удалению http://localhost отделитесь от изображений профиля и решите проблему:
<img src="/storage/profile-photos/photo.jpeg">
В любом случае в рабочей среде у вас будет другой файл .env.
Дополнительно
Вы внесли небольшое изменение в свой config/filesystems.php файл:
'public' => [
'driver' => 'local',
'root' => storage_path('/public/storage'),
'url' => env('APP_URL').'/public/storage/',
'visibility' => 'public',
],
Исходная настройка была:
'root' => storage_path('/app/public'),
Это сработало только после того, как вы удалили и перестроили символическую ссылку.
Но теперь в вашем каталоге проектов у вас, вероятно, такая ситуация:
- общедоступное хранилище css - приложение js - public - хранилище - профиль-фотографии - общедоступный - общедоступный - хранилище - хранилище - профиль-фотографии - профиль-фотографии .htaccess framework favicon.ico журналы index.php mix-manifest.json robots.txt web.config
По сути, вы создали новый диск. Я предполагаю, что это не было преднамеренным.
Кроме того, на фотографиях вашего профиля, вероятно, есть немного запутанная часть в их URL:
…/ хранилище / общедоступное / хранилище / профиль-фотографии / ….
Вы можете вернуться к исходной настройке, удалить дополнительную папку и перестроить sysmlink.
config/filesystems.php
'disks' => [
//...
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
//...
],
Ответ №2:
Сначала вам нужно создать хранилище в разделе public, а затем связать его. Итак, сначала перейдите в основную папку проекта laravel, а затем в общую папку.Если ссылки на хранилище не существуют, создайте его. затем вернитесь в основную папку проекта и создайте ссылку на хранилище
$ cd (laravel project folder)
$ cd public
$ rm -r storage
$ cd ..
$ php artisan storage:link
это должно решить проблему..
Комментарии:
1. Просто быстрое напоминание, что для тех, кто использует Laravel Sail, вам понадобится
sail artisan storage:link
вместо php artisan.
Ответ №3:
Установите свой APP_URL в .env , мой — APP_URL=http:// localhost:8000 и запустите команду в CLI как
php artisan storage:link
чтобы создать символическую ссылку для хранилища / приложения / общедоступной, если вы не выполнили команду, вы не получите изображение профиля на панели управления.
Ответ №4:
Изображение профиля успешно сохранено?
(Окно) Если да, то это шаги, которые я исправил:
- Удалите хранилище папок быстрого доступа, созданное в /project/public/
- Используйте команду php artisan storage: снова свяжите
- Обновите веб-страницу, и она решена.
Комментарии:
1. Это должен быть правильный ответ, работает с первой попытки. Спасибо
Ответ №5:
Найдите файл в папке конфигурации под названием jetstream.php и найдите ключ ‘features’ в возвращаемом массиве и раскомментируйте значение Features::profilePhotos() .
Перед:
'features' => [
// Features::profilePhotos(),
// Features::api(),
// Features::teams(),
],
После:
'features' => [
Features::profilePhotos(),
// Features::api(),
// Features::teams(),
],
Комментарии:
1. Всегда пожалуйста, приятель. Приятно сознавать, что это действительно решило вашу проблему.
Ответ №6:
я сделал это: удалить (APP_URL) на filesystems.php и это решает мою проблему, фотография профиля не отображается на jetstream
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('').'/storage',
'visibility' => 'public',
],
Комментарии:
1. В конечном итоге это привело меня к проблеме, которая заключалась в том, что мой APP_URL не был правильно установлен в файле .env.
Ответ №7:
Я столкнулся с той же проблемой при работе над своим проектом с использованием Laravel 8 (текущая последняя версия) Вот два подхода, с которыми я справился с проблемой:
-
В первом подходе вы можете легко изменить URL-адрес приложения в браузере с 127.0.0.1:8000 на localhost: 8000, а затем связать public / storage с папкой storage / app / public с помощью команды php artisan storage:link
-
Или во втором подходе вы можете отредактировать файл среды. Перейдите в файл конфигурации среды (.env) и измените APP_URL с http://localhost чтобы http://127.0.0.1:8000 а затем свяжите public / storage с папкой storage / app / public, используя команду php artisan storage:link
Наконец, перезапустите приложение с помощью команды php artisan serve, теперь оно должно работать. Я надеюсь, что это может помочь любому, кто сталкивается с такой проблемой.
Ответ №8:
Прежде всего, мы предполагаем, что вы уже включили в конфигурации / jetstream функцию profilePhoto
Измените свой env-файл на artisan serve link, который уже запущен. Вот так
APP_URL=http://127.0.0.1:8000
Они выполняют эти команды
- хранилище php artisan: ссылка
- php artisan optimize
- конфигурация php artisan: очистить
Перезагрузите или загрузите снова свой профиль с фотографиями и готово
Ответ №9:
извините, у меня была эта проблема, решаемая на этом уровне
-
Найдите файл в папке конфигурации под названием jetstream.php и найдите ключ «features» в возвращаемом массиве и раскомментируйте
Features::profilePhotos()
-
перейдите в .env и измените uri приложения на это
APP_URL=http://localhost:8000
-
в терминале введите:
php artisan serve
Ответ №10:
Я знаю, что здесь есть много других ответов, и это несколько более старый вопрос, но, поскольку он занимает много места в поиске Google, я собираюсь добавить то, что, по моему мнению, является моей проблемой, в надежде, что это может помочь кому-то, кто сталкивается с подобной проблемой.
Я смог увидеть, что моя фотография профиля была загружена, и все настройки и предложения здесь казались правильными, но я по-прежнему не получал никаких результатов при попытке получить доступ к user.profile_photo_url в моем шаблоне. Оказалось, что в HandleInertiaRequests.php Я делился пользовательским объектом, но разрешал ему показывать только определенные свойства. Мне просто нужно было добавить «profile_photo_url» в список свойств, чтобы это выглядело так:
public function share(Request $request)
{
return array_merge(parent::share($request), [
'ziggy' => function () use ($request) {
return array_merge((new Ziggy)->toArray(), [
'location' => $request->url(),
]);
},
'user' => fn () => $request->user()
? $request->user()->only('id', 'name', 'email', 'email_verified_at', 'current_team_id', 'account_id', 'profile_photo_url')
: null,
]);
}
Ответ №11:
В config/app.php для APP_URL может потребоваться порт, например:
‘url’ => env(‘APP_URL’, ‘http://localhost:8080 ‘),
Ответ №12:
Убедитесь, что ваш .env APP_URL указан правильно, и обязательно запустите php artisan storage:link. https://github.com/laravel/framework/issues/34319#issuecomment-691677346
Ответ №13:
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => '/storage',
'visibility' => 'public',
],
Привет, привет
Ответ №14:
Я столкнулся с той же проблемой и просто запустил php artisan storage: link, и это сработало для меня.
примечание: я запускаю эту команду при новом запуске laravel и не менял настройки пути к хранилищу (по умолчанию)
Ответ №15:
Ответ №16:
Если ваш профиль Jetstream-фотографии не отображаются, вам нужно выполнить простые 3 основных шага
- Сначала запустите эту команду php artisan storage:link
- Функции::profilePhotos (), включите это из config/jetstream.php
- Наконец, и в основном измените APP_URL из файла .env (это важно), если ваш APP_URL=http://localhost не покажет вам, поэтому измените его на APP_URL= http://127.0.0.1:8000 или, если вы используете виртуальный хост, тогда APP_URL = http://livewire_app.dev видишь, у меня это прекрасно работает
Ответ №17:
В моем случае я последовал чьим-то предложениям несколько месяцев назад, чтобы изменить аватары пользовательского интерфейса по умолчанию на Gravatar, и моя пользовательская модель реализовывала функции функции hasProfilePhoto… теперь, если это не относится к вам, я рекомендую внедрить соответствующие функции в вашу пользовательскую модель, особенно потому, что JetStream предназначен не для обновления пакета поставщика, а для начальной загрузки вашего приложения. По крайней мере, вы можете поиграть с выводами этих функций и выяснить, в чем проблема. Похоже, основная проблема заключается в том, что фотография загружается, но не извлекается с помощью функции ниже, которую вы можете реализовать в пользовательской модели и посмотреть, какая часть вывода неверна:
public function getProfilePhotoUrlAttribute()
{
return $this->profile_photo_path
? Storage::disk($this->profilePhotoDisk())->url($this->profile_photo_path)
: $this->defaultProfilePhotoUrl();
}
Надеюсь, это поможет.
Ответ №18:
Я также сделал это: удалил (APP_URL) из config/filesystems.php
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('').'/storage',
'visibility' => 'public',
],
Но это решило только половину проблемы для меня. Изображение теперь отображается только на панели навигации, но по-прежнему отсутствует на странице профиля.
Для достижения этой цели я сделал это:
В update-profile-information.blade.php файл, в котором я изменил источник изображения на
/storage/profile-photos/{{basename($this->user->profile_photo_path)}}
(возможно, это неправильное решение, но пока оно работало для меня в моем учебном проекте)
Комментарии:
1. Вам лучше отредактировать свой
.env
и установитьAPP_URL=http://localhost
, например (зависит от того, используете ли вы xampp или что-то еще).