Публичное сохранение в Livewire
Давайте рассмотрим ситуацию, когда обложку поста нужно показать в браузере по обычной ссылке. Файл в закрытой папке хранилища по такому адресу не откроется, и картинка на странице не появится.
Для файлов, которые должны быть
доступны снаружи, есть метод
storePublicly: он кладёт
копию в каталог с открытым
доступом.
Чтобы ссылка из папки
storage работала в браузере,
один раз выполняют команду:
php artisan storage:link
Давайте создадим компонент
PostCover:
php artisan make:livewire PostCover --class
Давайте добавим маршрут и страницу:
<?php
Route::get('/posts/cover', function () {
return view('posts-cover');
});
?>
<x-layout>
<livewire:post-cover />
</x-layout>
Давайте в методе save
положим файл в публичное
хранилище:
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\WithFileUploads;
class PostCover extends Component
{
use WithFileUploads;
public $photo;
public $path = '';
public function save()
{
$this->path = $this->photo
->storePublicly(
path: 'covers'
);
}
public function render()
{
return view(
'livewire.post-cover'
);
}
}
?>
Давайте в шаблоне оформим форму и вывод пути:
<div>
<form wire:submit="save">
<input
type="file"
wire:model="photo"
>
<button type="submit">
Save
</button>
</form>
{{ $path }}
</div>
Создайте компонент EmployeeCover.
Фото работника сохраняется так,
чтобы его можно было открыть
по адресу сайта.