В вашем маршруте обновления используется неправильный «глагол» и URL. Если вы посмотрите на Laravel * Контроллеры ресурсов , вы увидите различные действия и имена маршрутов, доступные для редактирования, обновления, удаления et c. при создании контроллера «CRUD».
Вы можете увидеть маршрут для действия «update» и его «глагол».
Измените свои маршруты на
Route::get('contact/{contact}/edit', 'ContactController@edit')->name('contact.edit');
Route::patch('contact/{contact}','ContactController@update')->name('contact.update');
Или, если вы хотите добавить полный контроллер CRUD, используйте короткую форму:
Route::resource('contact', 'ContactController');
Это создаст все необходимые маршруты в одной удобной строке кода. Используйте php artisan route:list
для проверки всех маршрутов.
Формы HTTP поддерживают только методы GET и POST, Laravel использует @method()
в лезвии для добавления других глаголов (положить, исправить, удалить):
Изменить:
ваша форма использует атрибуты disabled
на некоторых <input>
s. Эти значения будут не отправлены вместе с вашим запросом. Вот обновленные атрибуты edit.blade.php
:
disabled
были заменены на readonly
. action
использует Laravel s RouteModelBinding - Удалено
@foreach
, поскольку у вас есть только один элемент для редактирования
edit.blade. php:
<div id="contact">
<h2>Edit Contact</h2>
<form action="{{ route('contact.update', ['contact' => $contact]) }}" method="POST">
@csrf
@method('patch')
<div class="form-group">
<label for="kode_contact" class="control-label">Kode Kontak</label>
<input type="text" name="kode_kontak" id="kode_kontak" class="form-control" value="{{ $contact->kode_kontak}}" readonly>
</div>
<div class="form-group">
<label for="kode_pegawai" class="control-label">Kode Pegawai</label>
<input type="text" name="kode_pegawai" id="kode_pegawai" class="form-control" value="{{ $contact->kode_pegawai}}" readonly>
</div>
<div class="form-group">
<label for="email" class="control-label">Email</label>
<input type="text" name="email" id="email" class="form-control" value="{{ $contact->email}}">
</div>
<div class="form-group">
<label for="telepon" class="control-label">Telepon</label>
<input type="text" name="telepon" id="telepon" class="form-control" value="{{ $contact->telepon}}">
</div>
<div class="form-group">
<input class="btn btn-primary form-control" type="submit" value="Simpan">
</div>
</form>
</div>
Так как он использует RouteModelBinding, вы можете изменить свой метод update()
на:
public function update(Request $request, Contact $contact)
{
$contact->update([
'email' => $request->email,
'telepon' => $request->telepon,
]);
return redirect('contact');
}
Laravel будет знать, что такое Contact $contact