Ошибка "Метод PATCH не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD, POST." Метод обновления - PullRequest
0 голосов
/ 30 мая 2020

Привет, я пытаюсь обновить реестр своих помощников по таблицам, но когда я нажимаю sh кнопку отправки формы, появляется эта ошибка, я использую поворот таблицы между помощниками и событиями, но я Я пытаюсь редактировать только помощника. Это ошибка

Это мой код AssistantController. php файл и методы редактирования и обновления

редактировать и методы обновления

 public function edit(Assistant $assistant)
{   
    #obtain id assistant
    $assistant_id = $assistant->id;
    #get data event of the assistant to pass to the form
    $event = Assistant::find($assistant_id)->events()->get();
    return view('assistants.edit',compact('assistant','event'));
}


public function update(Request $request, Assistant $assistant)
{   
    #updating
    $assistant->update($request->all());        
    //$assistants->user()->associate(Auth::user());
    //
    #obtain id assistant
    $assistant_id = $assistant->id;
    #get data event of the assistant to pass to the form
    $event = Assistant::find($assistant_id)->events()->get();
    return redirect('assistants.index',compact('assistant','event'));
}

Это моя форма для помощников помощники формы ввода

@csrf
<div class="form-group">
    <label for="id">Document:</label>
    <small class="text-muted">Required(*)</small>                                                                
    <input type="number" class="form-control form-control-sm "  value="{{ old('id') ?? $assistant->id }}" name="id" autofocus>    
    <div>{{ $errors->first('id') }}</div>
</div>
<div class="form-group">
    <label for="name">Name:</label>
    <small class="text-muted">Required(*)</small>                              
    <input type="text" class="form-control form-control-sm "  value="{{ old('name') ?? $assistant->name }}" name="name" placeholder="First Name assistant">                                    
    <div>{{ $errors->first('name') }}</div>
</div>
<div class="form-group">
    <label for="last_name">Last name:</label>
    <small class="text-muted">Required(*)</small>                                  
    <input type="text" class="form-control form-control-sm "  value="{{ old('last_name') ?? $assistant->last_name }}" name="last_name" placeholder="Last name assistant">
    <div>{{ $errors->first('last_name') }}</div>
</div>
<div class="form-group">
    <label for="phone">Phone:</label>
    <small class="text-muted">Required(*)</small>
    <input type="number" class="form-control form-control-sm " value="{{ old('phone') ?? $assistant->phone }}" name="phone">
    <div>{{ $errors->first('phone') }}</div>
</div>
<div class="form-group">                                                         
    <label for="email">Email:</label>
    <small class="text-muted">Required(*)</small>
    <input type="mail" class="form-control form-control-sm " value="{{ old('email') ?? $assistant->email }}" name="email">
    <div>{{ $errors->first('email') }}</div>
</div>
<div class="form-group">                                        
    <label for="observations">Observations:</label>
    <input type="text" class="form-control form-control-sm " value="{{ old('observations') ?? $assistant->observations }}"name="observations">
    <div>{{ $errors->first('observations') }}</div>
</div>

Это моя страница редактирования

   @extends('layouts.back')

@section('title','Edit assistants')

@section('content')
<div class="container p-4">
    <div class="row">
        <div class="card">
            <div class="card-header">
                <div class="card-title">
                <h3>Edit details to assistant:</h3><br>
                <h4><strong> {{$assistant->name}} {{$assistant->last_name}}</strong> </h4>
                </div>
            </div>
            <div class="card-body">
                <form action="/assistants" method="POST">
                    @method('PATCH')
                    @include('assistants.form')                    
                    <button type="submit" class="btn btn-primary">Update</button>
                    <a href="{{@route('assistants.index',[id=>$event[0]])}}" class="btn btn-danger">Cancel</a>            
                </form>
            </div>
            <div class="card-footer">
            </div>            
        </div>
    </div>

</div>   
@endsection

Вот мои маршруты маршруты

 Auth::routes();

Route::get('/', 'HomeController@index')->name('home');

Route::resource('events', 'EventController');
Route::resource('assistants', 'AssistantController');
Route::resource('certificates', 'CertificateController');
Route::resource('signers', 'SignerController');

Я новичок.

всем спасибо.

1 Ответ

0 голосов
/ 30 мая 2020

При использовании Route::resource laravel автоматически формируются маршруты, указывающие на ваш контроллер в соответствии со стандартами REST

Если вы запустите php artisan route:list, вы получите что-то вроде этого

+-----------+-----------------------------+--------------------+--------------------------------------------------+
| Method    | URI                         | Name               | Action                                           |
+-----------+-----------------------------+--------------------+--------------------------------------------------+
| GET|HEAD  | assistants                  | assistants.index   | App\Http\Controllers\AssistantController@index   |
| POST      | assistants                  | assistants.store   | App\Http\Controllers\AssistantController@store   |
| GET|HEAD  | assistants/create           | assistants.create  | App\Http\Controllers\AssistantController@create  |
| GET|HEAD  | assistants/{assistant}      | assistants.show    | App\Http\Controllers\AssistantController@show    |
| PUT|PATCH | assistants/{assistant}      | assistants.update  | App\Http\Controllers\AssistantController@update  |
| DELETE    | assistants/{assistant}      | assistants.destroy | App\Http\Controllers\AssistantController@destroy |
| GET|HEAD  | assistants/{assistant}/edit | assistants.edit    | App\Http\Controllers\AssistantController@edit    |
+-----------+-----------------------------+--------------------+--------------------------------------------------+

Итак, в ваша форма, вы должны передать идентификатор модели (помощник-> id) или любое другое поле, которое вы установили для привязки модели маршрута

<form action="{{ route('assistants.update', ['assistant' => $assistant->id]) }}" method="post">
    @method('PATCH')

Обратите внимание, что в этом примере мы используем имя маршрута для ясности

Ошибка возникает из-за того, что путь в действии формы assisants неоднозначен, а laravel предполагает, что первый определен, который является индексом, и ожидает либо метод GET, либо HEAD, либо второй метод store, который ожидает метод POST

...