Laravel PUT 方法错误:路由不支持 PUT 方法

问题描述 投票:0回答:1

当我尝试更新学生记录时,我的 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
php laravel
1个回答
0
投票

问题出在表单动作上。由于您要更新学生记录,因此表单操作应指向 StudentController 中的更新方法,而不是编辑方法。表单的正确操作应该是students.update路线而不是students.edit。

© www.soinside.com 2019 - 2024. All rights reserved.