У меня есть форма с 2 кнопками, 1 кнопка сохраняет изменения формы в базу данных (включая имя файла в поле с именем «вложение», вторая кнопка загружает фактический файл на сервер.
Мне удалось сохранить или загрузить эхо каждой кнопки в зависимости от нажатия, поэтому форма читает, какая кнопка нажата, и функция сохранения также работает. Однако функция загрузки, похоже, не читает поле ввода с именем «вложение»
Я использую 1 контроллер с тремя функциями. Код html для кнопок:
<input type="file" name="attachment" enctype="multipart/form-data"/>
<p align="center">
<input type="submit" btn btn-primary class="btn btn-primary" id="upload" name="action" value="upload">
<input type="submit" btn btn-primary class="btn btn-primary" id="save" name="action" value="save">
Контроллер имеет 3 функции, одна общая функция, которая вызывает обновление или загрузку функция, которая сохраняет изменения, та, которая должна загрузить файл
Всего:
public function store(Request $request, $_id = false, $attachment = false){
//check which submit was clicked on
if($request->action == 'upload'){
//
$this->upload($request);
return redirect()->route('home');
} elseif($request->action == 'save') {
//echo 'save pressed';
//run function save all form fields
$this->update($request, $_id);
return redirect()->route('home');
} else {echo "error";}
}
Сохранить изменения: (тот, который работает)
public function update (Request $request, $_id){
//$this->upload($request);
/*
$path = $request->file('attachment');
$path->storeas('/public','123'); */
$data = post::findOrFail($_id);
$data->title = $request->title;
$data->content = $request->content;
$data->shorttext = $request->shorttext;
$data->created_by = $request->created_by;
$data->text3 = $request->text3;
$data->attachment = $request->attachment;
$data->save();
/* return response()->json([
'name' => 'Abigail',
'state' => 'CA'
]); */
if($data){
return redirect()->route('home');
}else{
return back();
}
}
Выгрузка:
function upload(Request $request){
$path = $request->file('attachment');
// $original = $request->file('attachment')->getClientOriginalName();
$path->store('/public');
//return $original;
}
Выгрузка выдает ошибку: Вызов хранилища функций-членов () на null
Я думаю, это означает, что он не может прочитать поле «вложение», поэтому оно r eturns null и ничего не может загрузить. Может быть, это как-то связано с тем, что from использует @put, а для загрузки нужен пост?
Я протестировал саму функцию загрузки в отдельном блейд-сервере и отдельном контроллере, и там она работает, но, как я уже сказал, в этом случае метод является публикацией.
Для полноты маршрутов к моей форме и мой отдельный тест загрузки bewlo (любая помощь очень ценится (мне бы хотелось, чтобы обе функции были на одной кнопке, поэтому я могу нажать кнопку, и она загрузит файл, сохранит изменения и сохранит имя файла в БД, но я буду пока согласны на 2 кнопки.
Route::put('/post/update/{_id}', 'PostController@store')->name('post.update');
//test for upload only
Route::post('/upload', "UploadController@upload")->name('upload');