Как организовать редактирование статьи с картинкой на Laravel 5.8?
Делаю сайт. Есть статьи, для которых в админке есть ресурсный контроллер. В нём можно добавлять новые статьи и редактировать существующие. При добавлении новой всё хорошо: в текстовые поля вводится текст, а в type="file" файл картинки. Файл загружается на сервер, а путь к нему прописывается в таблицу статьи, вместе с остальными данными.
Проблема с редактированием. При вызове edit() появляется форма с правильно заполненными текстовыми полями, но без заполнения поля файла. У него стоит "Файл не выбран". Программно заменять value этого инпута нельзя, это не работает (по соображениям безопасности). И как быть? Я хочу, чтобы при появлении формы редактирования показывался текущий файл и при сохранении (если его никто не трогал) путь к нему сохранялся. Как это сделать?
Контроллер
public function store(Request $request)
{
$article = Article::create($request->all());//записываем в базу
//Загрузка файлов
$file = $request->file('img');
$filename = $file->getClientOriginalName();
$file->move('../public/images/download', $filename);//папка для загрузки изображения
if ($filename) {
$article = Article::find($article->id);
$article->img = 'images/download/' . $filename;
$article->save();
}
return redirect()->route('admin.article.index');
}
public function edit(Article $article)
{
return view('admin.articles.edit', [
'article' => $article, //массив статей
]);
}
public function update(Request $request, Article $article)
{
$article->update($request->except('slug'));
return redirect()->route('admin.article.index');
}
form.blade.php (value вставляется, но не влияет на кнопку)
@if(isset($article->id))
{{-- Для edit--}}
<input type="file" class="form-control" name="img" placeholder="img"
value="{{$article->img}}">
@else
{{-- Для create--}}
<input type="file" class="form-control" name="img" placeholder="img"
value="">
@endif
Ответы (1 шт):
Попробую пояснить немного подробнее. В html есть тэг label, который устанавливает связь с полем( в нашем случае input) - http://htmlbook.ru/html/label . При нажатии на label срабатывает инпут. В инпут ничего писать нельзя, в label можно писать что угодно. Вам приведен пример:
<div class="form-group">
<label for="img">
текущий файл {{ $article->img }} , для замены выберите другой файл
</label>
<input type="file" class="form-control" id="img" name=”img” >
</div>
который даст следующую картину
т.е. у Вас появляется информация о текущем файле и при необходимости можете его поменять на новый
CSS + JS тут для феншуя: например скрыть поле ввода файла или подставить новое значение инпута в label
<div class="form-group">
<label for="img">
текущий файл {{ $article->img }} , для замены выберите другой файл
</label>
<input type="file" class="form-control my-super-file" id="img" name=”img” >
</div>
CSS:
.my-super-file { display:none;}
результат
видно только текущий файл и при нажатии можно ввести новый(правда старый останется)
путем простешего js вы приводите это все к примерно этому https://codepen.io/AVZ/pen/RwNXEYq