当我尝试更新学生记录时,我的 Laravel 应用程序中的 PUT 方法遇到了问题。每当我尝试发出 PUT 请求来更新学生信息时,我都会收到以下错误消息:路线 Students/10/edit 不支持 PUT 方法。支持的方法:GET、HEAD。
这是(blade php)edit-comments.blade.php
<div class="card-body">
<form method="POST" action="{{ route('students.edit', $student->id) }}">
@csrf
@method('PUT')
<div class="form-group row">
<label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ $student->name }}" required autocomplete="name" autofocus>
@error('name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('Email') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ $student->email }}" required autocomplete="email">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="age" class="col-md-4 col-form-label text-md-right">{{ __('Age') }}</label>
<div class="col-md-6">
<input id="age" type="number" class="form-control @error('age') is-invalid @enderror" name="age" value="{{ $student->age }}" required autocomplete="age">
@error('age')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="address" class="col-md-4 col-form-label text-md-right">{{ __('Address') }}</label>
<div class="col-md-6">
<input id="address" type="text" class="form-control @error('address') is-invalid @enderror" name="address" value="{{ $student->address }}" required autocomplete="address">
@error('address')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="phone_number" class="col-md-4 col-form-label text-md-right">{{ __('Phone Number') }}</label>
<div class="col-md-6">
<input id="phone_number" type="text" class="form-control @error('phone_number') is-invalid @enderror" name="phone_number" value="{{ $student->phone_number }}" required autocomplete="phone_number">
@error('phone_number')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Update') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
学生控制器
public function edit($id)
{
$student = Student::findOrFail($id);
return view('students.edit', compact('student'));
}
public function update(Request $request, $id)
{
$request->validate([
'name' => 'required',
'email' => 'required',
'phone_number' => 'required',
'address' => 'required',
'age' => 'required',
]);
$student = Student::findOrFail($id);
$student->update([
'name' => $request->input('name'),
'email' => $request->input('email'),
'phone_number' => $request->input('phone_number'),
'address' => $request->input('address'),
'age' => $request->input('age'),
]);
return redirect()->back()->with('status', 'Student updated successfully');
}
使用的路由
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\StudentController;
Route::resource('students', StudentController::class);
和路线:列表
POST _ignition/execute-solution ............................................ ignition.executeSolution › Spatie\LaravelIgnition › ExecuteSolutionController
GET|HEAD _ignition/health-check ........................................................ ignition.healthCheck › Spatie\LaravelIgnition › HealthCheckController
POST _ignition/update-config ..................................................... ignition.updateConfig › Spatie\LaravelIgnition › UpdateConfigController
GET|HEAD api/user ............................................................................................................................................
GET|HEAD sanctum/csrf-cookie ............................................................... sanctum.csrf-cookie › Laravel\Sanctum › CsrfCookieController@show
GET|HEAD students ................................................................................................... students.index › StudentController@index
POST students ................................................................................................... students.store › StudentController@store
GET|HEAD students/create .......................................................................................... students.create › StudentController@create
GET|HEAD students/{student} ........................................................................................... students.show › StudentController@show
PUT|PATCH students/{student} ....................................................................................... students.update › StudentController@update
DELETE students/{student} ..................................................................................... students.destroy › StudentController@destroy
GET|HEAD students/{student}/edit ...................................................................................... students.edit › StudentController@edit
问题出在表单动作上。由于您要更新学生记录,因此表单操作应指向 StudentController 中的更新方法,而不是编辑方法。表单的正确操作应该是students.update路线而不是students.edit。