【问题标题】:The POST method is not supported for this route. Supported methods: PUT. LARAVEL此路由不支持 POST 方法。支持的方法:PUT。拉拉维尔
【发布时间】:2021-12-22 01:57:45
【问题描述】:

我想用 PUT 方法发送数据 但是,会发生此错误。

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException 此路由不支持 POST 方法。支持的方法:PUT。

我真的不明白为什么我的代码不正确。

web.php

Route::get('/', function () {
    return redirect('/home');
});

Auth::routes();
Route::put('/save_data', 'AbcController@saveData')->name('save_data');

view.blade.php

        <form action="{{route('save_data')}}" method="POST">
          @method('PUT')
          @csrf
          <input type = "hidden" name = "type" value ='stack' >
         
          <div>
            <button>post</button>
          </div>
        </form>

当它改变时

          <input type="hidden" name="_method" value="PUT">
          <input type="hidden" name="_token" value="{{ csrf_token() }}">

而不是

          @method('PUT')
          @csrf

效果很好。

【问题讨论】:

  • 您好,只是一些澄清问题。这种形式是否可能位于另一个形式(嵌套)中?是否可以为/save_data 定义另一个使用post 的路由?
  • @flow-stack 请列出与组内保存数据路由相关或至少相关的路由。
  • 当您使用指令@method@csrf 时,您能否验证呈现的HTML 是什么?

标签: laravel


【解决方案1】:

确保首先检查具有相同名称的另一条路线 您可以制作 POST 路由,不需要将其放在表单标签 @method('PUT')

之后

更改此 Auth::routes() 之前的路由放置;

在路由中使用 save_data 而不是 /save_data。

使用 {{url('save_data')}} 代替 {{route('save_data')}}。

【讨论】:

    【解决方案2】:

    改变这个

    <button type="submit">post</button> instead of <button>post</button>
    

    【讨论】:

    • 默认情况下,没有类型的按钮将是submit。为了清楚起见,我建议指定类型,但在这种情况下这不是强制性的。
    【解决方案3】:

    如果您坚持使用 PUT,您可以将表单操作更改为 POST 和 添加一个隐藏的方法字段,它的值为 PUT 和一个隐藏的 csrf 字段 (如果您使用刀片,那么您只需要添加 @csrf_field 和 {{ 方法字段('PUT')}})。这样表单将接受请求。 您可以简单地将路由和表单方法更改为 POST。它会工作 很好,因为您是定义路线的人,而不是使用 资源组

    毕竟运行工匠命令

    php artisan route:clear
    

    【讨论】:

      猜你喜欢
      • 2021-01-19
      • 2019-08-06
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 2020-04-13
      • 2023-02-04
      • 2019-12-29
      相关资源
      最近更新 更多