【问题标题】:The DELETE method is not supported for this route. Supported methods: GET, HEAD, POST此路由不支持 DELETE 方法。支持的方法:GET、HEAD、POST
【发布时间】:2019-10-11 02:19:30
【问题描述】:

我正在创建一个显示一些数据的索引表单。一切准备就绪,但是当我按下删除按钮时,出现错误“此路由不支持 DELETE 方法。支持的方法:GET、HEAD、POST。”

路线

Route::group(['middleware' => ['auth']], function() {
    Route::resource('roles','RoleController');
    Route::resource('users','UserController');
    Route::resource('kamar_theresia','Kamar_TheresiaController');
});

控制器

public function destroy($id)
{
    Kamar_Theresia::find($id)->delete();
    return redirect()->route('kamar_theresia.index')
        ->with('success','Kamar Theresia deleted successfully');
}

查看

        @foreach ($kamar_theresia as $tere)
        <tr>
            <td>{{ ++$i }}</td>
            <td>{{ $tere->nama }}</td>
            <td>{{ $tere->name }}</td>
            <td>{{ $tere->ketersediaan }}</td>
            <td>
                @can('theresia-delete')
                {!! Form::open(['method' => 'DELETE','route' => ['kamar_theresia.destroy', $tere->id],'style'=>'display:inline']) !!}
                {!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
                {!! Form::close() !!}
                @endcan
            </td>
        </tr>
        @endforeach

【问题讨论】:

    标签: laravel


    【解决方案1】:

    那是因为您将 DELETE 方法作为表单的方法传递,这是错误的,正确的做法是传递 de POST 方法。

    检查这个例子:

    <form action="{{ route('kamar_theresia.destroy', $tere->id) }}" method="POST">
        @csrf
        @method('delete')
        <button type="submit" class="btn btn-outline-danger">Delete</button>
    </form>
    

    您的控制器应该是:

    public function destroy(Kamar_Theresia $khamar_teresia)
    {
        $khamar_teresia->delete();
        return redirect()->route('kamar_theresia.index')
                        ->with('success','Kamar Theresia deleted successfully');
    }
    

    【讨论】:

    • 我已更改,然后我收到错误“缺少 [Route: kamar_theresia.destroy] [URI: kamar_theresia/{kamar_theresium}] 所需的参数。”
    • 可能问题出在你的控制器上,因为你使用的是Route::resources,你的destroy方法的参数应该是Kamar_Theresia $kamar_theresia。我会编辑帖子。
    • 确保 $tere->id 有一个值。当您尝试将 null 值作为您的 destroy 方法的参数传递时,就会出现这种错误。
    • 好的,我明白哪里错了。谢谢你帮助我。
    【解决方案2】:

    确保您的表单没有包含在另一个表单中。我犯了这个愚蠢的错误,得到了同样的错误信息。

    【讨论】:

      【解决方案3】:

      看起来你快到了!我会使用 POST 的形式类似于这样:

      {{ Form::open(['method' => 'POST', 'route' => ['kamar_theresia.destroy']) }}
          {{ Form::hidden('id',$tere->id) }}
          {{ Form::submit('Delete') }}
      {{ Form::close() }}
      

      然后在你的控制器中

      public function destroy(Request $request){
          $id = $request->input('id');
          Kamar_Theresia::find($id)->delete();
      

      您的代码的其余部分应该没问题。如果这不起作用,请告诉我。

      【讨论】:

      • 我考虑了好几次都没有发生。
      • 抱歉,我将路由设置为索引而不是销毁,你能用更新的代码再试一次吗?
      • 我已更改,然后我收到错误“缺少 [Route: kamar_theresia.destroy] [URI: kamar_theresia/{kamar_theresium}] 所需的参数。”
      • 与 Pedro 解决方案相同的错误,正如他所建议的,首先确保变量不为空。您可以将表单字段从隐藏更改为文本,以查看它是否填充了任何内容。如果没问题,接下来就是检查我们在表单中使用的路线是否正确
      • 我已经写了“Illuminate\Http\Request;”在控制器的顶部。然后我将销毁代码更改为:public function destroy($id) { Kamar_Theresia::find($id)->delete(); return redirect()->route('kamar_theresia.index') ->with('success','Kamar Theresia 删除成功'); }
      【解决方案4】:

      在表单中使用{{ csrf_field() }}{{ method_field('DELETE') }}

       {{ csrf_field() }}
       {{ method_field('DELETE') }} 
      

      在控制器中使用它

      public function destroy($id)
          {
             $delete = kamar_theresia::find($id);
             $delete->delete();
             return redirect('/')->with('deleted','Kamar Theresia deleted successfully');
          }
      

      如果我们使用Route::resource(),那么它将使用销毁功能自动路由。

      【讨论】:

        【解决方案5】:

        忘记在开始时使用斜线:

        <form method="POST" action={{--here=> --}}"/save_edit_delete_order/{{$order_id}}">  
                    @csrf
                    @method('delete')
        ......
        
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                            <button type="submit" class="btn btn-primary">Yes, I am</button>
                        </div>
        
                    </div>
                </form>
        

        在资源控制器中:

        public function destroy($id)
        {
            return 'kuku';
        }
        

        【讨论】:

          【解决方案6】:

          查看

          <form action="{{route('command.delete',[$command->id,$command->car_id])}}" method="post">
          @csrf
          {{method_field('delete')}}
          <button type="submit" class="btn btn-danger"><i class="fa fa-trash"></i></button>
          </form>
          

          网络

          Route::delete('/commands/{commandId}/{carId}/delete','CommandController@deleteUserCommands')->name('command.delete');
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-10-01
            • 2021-09-04
            • 1970-01-01
            • 2019-08-28
            • 2019-08-31
            • 2021-05-05
            相关资源
            最近更新 更多