#php #laravel #octobercms
#php #laravel #octobercms
Вопрос:
Я пытаюсь загрузить файл изображения из интерфейса в OctoberCMS
У меня есть образцовый человек и отношение:
public $attachOne = [
'photo' => 'SystemModelsFile'
];
В php-блоке с формой загрузки:
public function onUploadImage() {
$person = Person::where('id', '=', $this->param('id'))->first();
$person->photo = Input::file('avatar');
$person->save();
}
И мой шаблон:
<form method="POST" action="/persons/person/{{person.id}}" accept-charset="UTF-8" enctype="multipart/form-data">
<input type="hidden" name="_handler" value="onUploadImage">
<input type="file" name="avatar" id="avatar" />
{{ form_token() }}
{{ form_sessionKey() }}
<button type="submit" data-attach-loading>Upload</button>
После отправки он сохраняет только путь к БД ‘http://my-site/storage/app/uploads/public /’ и не загружает никаких файлов в файловую систему. Похоже, что нет каких-либо разрешений, но я могу легко загружать изображения из бэкэнда.
Где моя ошибка?
Ответ №1:
Вы должны получить загруженный файл из запроса и сохранить его на одном из настроенных дисков. И сохраните путь к изображению в базе данных.
Предположим storage/app/public/images
, что это каталог, в котором должны храниться загруженные изображения.
public function onUploadImage() {
if(request()->hasFile('avatar') amp;amp; request()->file('avatar')->isValid()) {
$file = request()->file('avatar');
$filename = $file->getClientOriginalName();
$person = Person::where('id', '=', $this->param('id'))->first();
$person->photo = $file->storeAs('images', $filename)
$person->save();
}
}
Ответ №2:
Вот решение.
if(request()->hasFile('avatar') amp;amp; request()->file('avatar')->isValid()) {
$file = new SystemModelsFile;
$file->data = Input::file('avatar');
$file->is_public = true;
$file->save();
$person = Person::where('id', '=', $this->param('id'))->first();
$person->photo()->add($file);
$person->save();
}