Laravel 6: 2 кнопки в одной форме, выполняющие разные функции - PullRequest
0 голосов
/ 19 июня 2020

У меня есть форма с 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...