Я работаю над приложением электронного рецепта с использованием Laravel 8. Я создал страницу оформления заказа, которая отправит форму, содержащую только 1 значение «appointment_id», так что после отправки формы нажатием кнопки «Готово» соответствующий статус назначения будет изменен на «Завершено». " контроллером с использованием id_application_id. Но когда я нажимаю кнопку, чтобы вызвать методы, это дает мне ошибку 404. Я использовал метод POST. Также используется CSRF. Вот мои коды,
checkout.blade.php
<form action = "/doctor/appointments/checkout" method = "POST">
@csrf
<div class = "form-group row">
<div class = "col-md-4">
<input type = "hidden" name = "appointment_id" value = "{{$appointment->id}}">
<input type = "submit" class = "btn btn-primary btn-block" value = "SAVE">
</div>
</div>
</form>
некоторые из моих маршрутов: веб.php
Route::prefix('/doctor')->name('doctor.')->namespace('Doctor')->group(function(){
//Appointment Routes
Route::get('/appointments/all',[App\Http\Controllers\Doctor\Appointment\AppointmentController::class,'AllAppointments'])->name('Appointments')->middleware('doctor');
Route::get('/appointments/view',[App\Http\Controllers\Doctor\Appointment\AppointmentController::class,'ViewAppointment'])->name('Appointment')->middleware('doctor');
Route::post('/appointments/view',[App\Http\Controllers\Doctor\Appointment\AppointmentController::class,'DeleteAppointment'])->name('DeleteAppointment')->middleware('doctor');
Route::get('/appointments/conversation',[App\Http\Controllers\Doctor\Appointment\ConversationController::class,'ViewConversation'])->name('ViewConversation')->middleware('doctor');
Route::post('/appointments/conversation',[App\Http\Controllers\Doctor\Appointment\ConversationController::class,'SendMessage'])->name('SendMessage')->middleware('doctor');
Route::get('/appointments/requests',[App\Http\Controllers\Doctor\Appointment\AppointmentController::class,'ShowRequest'])->name('Requests')->middleware('doctor');
Route::post('/appointments/requests',[App\Http\Controllers\Doctor\Appointment\AppointmentController::class,'RequestHandel'])->name('Handel')->middleware('doctor');
Route::get('/appointments/prescription',[App\Http\Controllers\Doctor\Appointment\PrescriptionController::class,'CreatePrescription'])->middleware('doctor')->name('CreatePrescription');
Route::post('/appointments/prescription',[App\Http\Controllers\Doctor\Appointment\PrescriptionController::class,'AddMedicine'])->name('AddMedicine');
Route::get('/appointments/checkout',[App\Http\Controllers\Doctor\Appointment\CheckoutController::class,'ViewCheckout'])->middleware('doctor')->name('ViewCheckout');
Route::post('/appointments/checkout',[App\Http\Controllers\Doctor\Appointment\CheckoutController::class,'EndAppointment'])->name('EndAppointment')->middleware('doctor');
}
CheckoutController.php
<?php
namespace App\Http\Controllers\Doctor\Appointment;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\Appointment;
class CheckoutController extends Controller
{
public function ViewCheckout(Request $request){
$id = $request->input('id');
$medicines = DB::table('medicines')->where('appointment_id', '=',$id)->get();
$appointments = DB::table('appointments')->where('id', '=',$id)->get();
return view('doctor.appointments.checkout',['medicines'=>$medicines,'appointments'=>$appointments]);
}
public function EndAppointment(Request $request){
$id = $request->input('id');
$appointment = Appointment::findOrFail($id);
$appointment->status = 'Completed';
$appointment->save();
return redirect()->to('/doctor/appointments/all')->with('status','Appointment has been completed');
}
}
Я проверил свои маршруты по
php artisan route:list
маршрут существует там. Я также очистил маршруты маршрутов с помощью ,
php artisan route:clear
все еще сталкивается с проблемой.
Я также обновил файл composer. Но это не решило мою проблему. Все остальные маршруты работают нормально. Новые маршруты тоже работают кроме одного:
Route::post('/appointments/checkout',[App\Http\Controllers\Doctor\Appointment\CheckoutController::class,'EndAppointment'])->name('EndAppointment')->middleware('doctor');
**
**
@lagbox спасибо: p Я сделал такие глупые ошибки, назвав поле ввода «appointment_id» и запросив ввод как «id» .. это была проблема. Спасибо дружище .
Ошибка возникает из-за findOrFail: вы указываете неверный id, так как в форме вы отправили appointment_id
, а пытаетесь получить id
только из запроса. Измените его на:
$id = $request->input('appointment_id');
$appointment = Appointment::findOrFail($id);
Поле «id» не id
, а appointment_id
.
Model::findOrFail()
выдаст исключение, если не сможет найти запись, которая будет преобразована в ответ 404.
$id = $request->input('appointment_id');
$appointment = Appointment::findOrFail($id);
вы можете изменить код
<input type = "hidden" name = "appointment_id" value = "{{$appointment->id}}">
к
<input type = "hidden" name = "id" value = "{{$appointment->id}}">
Поскольку идентификатор не найден в CheckoutController
$id = $request->input('id');
Model::findOrFail Если идентификатор не найден, будет выдан ответ 404.
Я надеюсь, что это поможет вам
findOrFail
выдаст исключение, если не найдет запись, которая преобразуется в ответ 404.