【问题标题】:MethodNotAllowedHttpException when posting data from form to controller将数据从表单发布到控制器时出现 MethodNotAllowedHttpException
【发布时间】:2019-06-21 05:51:13
【问题描述】:

我正在做一个简单的输入字段并将数据从表单提交到控制器,但总是得到 MethodNotAllowedHttpException。

blade.php

<form class="form-horizontal" method="post" action="sale/api">

<div class="form-group">
    <label for="name" class="col-lg-2 control-label">
        Subdomain Name
    </label>
    <div class="col-lg-10">
        <input type="text" class="form-control" id="name" name="name">
    </div>
</div>
<div class="form-group">
    <label for="api_key" class="col-lg-2 control-label">
        Api Key
    </label>
    <div class="col-lg-10">
        <input type="api_key" class="form-control" id="api_key" name="api_key">
    </div>
</div>
<div class="form-group">
    <div class="col-lg-10 col-lg-offset-2">
        <button type="submit" class="btn btn-primary">Save</button>
    </div>
</div>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

控制器

    public function sync()
    {

        $input = Input::only('name','api_key');            
        $user = new Sale;
        $user->name = $input['name'];
        $user->api_key = $input['api_key'];

        Debugbar::info($user->name);
    }

路线

Route::post('sale/api','SaleController@sync');

【问题讨论】:

  • 在您的 from 中添加“@csrf”令牌。
  • action="sale/api" 是一个相对 URL,只是一个问题邀请。执行 action={{ action("SaleController@sync") }} 以根据您的路线获取正确的 URL。
  • 我总是使用route-helper 来生成始终正确的路径
  • @apokryfos 同样的错误,我不确定缺少哪个部分。

标签: php laravel laravel-4


【解决方案1】:

需要修改的是你的行为:

html:

<form class="form-horizontal" method="post" action="{{ route('sale.api') }}">
    @csrf
    <div class="form-group">
        <label for="name" class="col-lg-2 control-label">
            Subdomain Name
        </label>
        <div class="col-lg-10">
            <input type="text" class="form-control" id="name" name="name">
        </div>
    </div>
    <div class="form-group">
        <label for="api_key" class="col-lg-2 control-label">
            Api Key
        </label>
        <div class="col-lg-10">
            <input type="api_key" class="form-control" id="api_key" name="api_key">
        </div>
    </div>
    <div class="form-group">
        <div class="col-lg-10 col-lg-offset-2">
             <button type="submit" class="btn btn-primary">Save</button>
        </div>
    </div>
    <input type="hidden" name="_token" value="{{ csrf_token() }}">

路线:

Route::post('/sale/api','SaleController@sync')->name(sale.api);

希望这会有所帮助! :)

【讨论】:

    【解决方案2】:

    像这样更新表单

    <form class="form-horizontal" method="post" action="{{ url('sale/api')}}">
    

    【讨论】:

      【解决方案3】:

      在表单中添加 csrf 字段。

      <form class="form-horizontal" method="post" action="sale/api">            
      {{csrf_field()}}
      

      Laravel 不允许你在没有 csrf 令牌的情况下发布。

      【讨论】:

        【解决方案4】:

        将你的 route.php 更新为,

        Route::post('/sale/api',array('as' => 'sale.api', 'uses' => 'SaleController@sync'));
        

        将刀片更新为,

        <form class="form-horizontal" method="post" action="{{route('sale.api')}}">
        

        让我知道它是否有效。

        【讨论】:

        • 新错误,Call to undefined method Illuminate\Routing\Route::name()
        • 对不起,我没有注意到它是 laravel 4。现在请更新路线。
        猜你喜欢
        • 2018-01-02
        • 2017-11-10
        • 2016-07-12
        • 2019-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        相关资源
        最近更新 更多