Кнопка Изменить не работает, несмотря на то, что я вызываю метод исправления ‘@method (‘PATCH’)’, и я хочу показать документ, но он не отображается

#php #laravel

#php #laravel

Вопрос:

редактирование не работает, когда я нажимаю на кнопку редактирования, оно восстанавливает значения входных данных, но не изменяет их в базе данных

Edit.blade.php

 @extends('index')
@section('content')
    <script language="javascript" type="text/javascript" src={{ URL::to('js/extension.js') }}></script>
    <div class="form-group" style="margin-top: 100px;">
        <form class="forms-sample" action="/documentSideBar" method="get" enctype="multipart/form-data">
            @csrf
            @method('PATCH')
            <div class="form-group">
                <label for="nomDocument">Nom document</label>
                <input type="text" class="form-control" id="nomDocument" name="nomDocument"
                       value="{{$document->nomDocument}}" onChange='getoutput2()'>
            </div>
            <div class="form-group">
                <label for="description">Description</label>
                <input type="text" class="form-control" id="description" name="description"
                       value="{{$document->description}}">
            </div>

            <div class="row">
                <div class="col-md-6">
                    <div class="form-group row">
                        <label class="col-sm-3 col-form-label">Type</label>
                        <div class="col-sm-9">
                            <select class="form-control">
                                <option>Documents administratifs</option>
                                <option>Documents financiéres</option>
                            </select>
                        </div>
                    </div>
                </div>
            </div>

            <div class="form-group">
                <label for="fille">Importer un fichier</label>
                <input type="file" onChange='getoutput()' name="file" id="fille" class="form-control">
                <input id='extension' type='hidden' name='extension'>
                <input id="pathe" type="hidden" name="path">
            </div>
            <button type="submit" class="btn btn-success mr-2">Modifier</button>
            <button class="btn btn-light">Annuler</button>

        </form>
    </div>
@endsection
  

documentSideBar.blade.php

 <td style="width:300px">
                                                    <a href="/download/{{$document->id}}" class="btn btn-success"><i
                                                                class="glyphicon glyphicon-download-alt"></i></a>

                                                    <a href="/documentSideBar/{{$document->id}}/edit" style="float:right" class="btn btn-primary">
                                                        <i class="glyphicon glyphicon-edit"></i>
                                                    </a>

                                                    <form action="{{ action('DocumentsController@destroy', $document->id)}}" method="POST">
                                                        @method('DELETE')
                                                        @csrf
                                                        <button class="btn btn-danger"><i
                                                                    class="glyphicon glyphicon-trash"></i></button>
                                                    </form>
                                                </td>
  

это метод редактирования и обновления в контроллере
DocumentsController.php

  public function edit($id)
        {
            $document = Document::findOrFail($id);
            return view('documents.edit', compact('document'));
        }
     public function update(Document $document)
        {

            $document->nomDocument = request('nomDocument');
            $document->description = request('description');
            $d=request('path');
            if(isset($d)){
            $document->path ='username'.'/'.request('path');
            }
            $document->save();

            return redirect('/documentSideBar');
        }
 public function show($id)
    {
        $document = Document::findOrFail($id);

        return view('documentSideBar', compact('document'));
    }
  

также я я хочу настроить кнопки, я не знаю, как сделать пробел между ними

введите описание изображения здесь

Ответ №1:

ошибка была в web.php : вот правильный маршрут

 Route::resource('documentSideBar','DocumentsController');

Route::get('download/{id}','DocumentsController@download');

Route::get('show/{id}','DocumentsController@show');

Route::post('/update/{id}','DocumentsController@update');
  

Ответ №2:

Вы должны изменить свой метод формы на POST и изменить свое действие на шаблон ресурса:

  <form class="forms-sample" action="{{route('documentSideBar.update', $document->id)}}" method="POST" enctype="multipart/form-data"
   @csrf
   @method('PATCH')
  

Когда вы изменяете данные в своей базе данных, вы должны использовать POST, а не GET.

Взгляните сюда, чтобы увидеть больше информации о методах.

Вам также следует взглянуть на раздел «Контроллер ресурсов«, чтобы больше понять, что вы используете

Комментарии:

1. я уже пробовал это, и я получил эту ошибку Метод ИСПРАВЛЕНИЯ не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD, POST.

2. Метод ИСПРАВЛЕНИЯ, который вы указали в директиве blade method('PATCH') , в вашем теге формы, как сказано выше, метод должен быть POST

3. И если вы обновляете все атрибуты из документа, вам следует использовать метод PUT.

4. я пробую это, как вы сказали, и это не работает, я не знаю, в маршруте ошибка или в методе, ‘<класс формы=»forms-sample» action =»/documentSideBar» метод =»post» enctype =»multipart /form-data»> @csrf @method(‘PATCH’)’

5. извините за опоздание, вот маршрут : Route::resource(‘documentSideBar’,’DocumentsController’); Route::get(‘download /{id}’,’DocumentsController@download’); Route::get(‘show/{id}’,’DocumentsController@show’); Route ::post(‘/update/{id}’,’ DocumentsController @update’); но я заставляю его работать, изменяя его на этот маршрут