为什么Post方法在Laravel中给出错误MethodNotAllowedHttpException

时间:2019-04-12 15:23:34

标签: php html laravel

我正在尝试在Laravel中提交表单,但出现错误此路由不支持POST方法。支持的方法:GET,HEAD,PUT,PATCH,DELETE。

我尝试了post method in laravel give MethodNotAllowedHttpException中的建议,但没有一个起作用。 这是我的代码。

<div class="row" style="background: #ffffff;">
  <div class="col-lg-12 col-md-12 col-sm-12" style="background: white; margin: 10px">
    <form method="post" action="{{ route('companies.update',[$company->id]) }}">
      {{ csrf_field() }}

      <input type="hidden" name="method" value="put">

      <div class="form-group">
        <label for="company.name">Name <span class="required">*</span> </label>
        <input placeholder="Enter name" id="company-name" required name="description" spellcheck="false" class="form-control" value="{{ $company->name }}" />


      </div>

      <div class="form-group">
        <label for="company-content">Description</label>
        <textarea placeholder="Enter Description" style="resize: vertical" id="company-content" name="description" rows="5" spellcheck="true" class="form-control autosize-target text-left">
                                {{$company->description}}</textarea>
      </div>

      <div class="form-group">
        <input type="submit" class="btn btn-primary" value="Submit" />

      </div>

    </form>
  </div>

</div>

get put 替换帖子可消除错误,但不会执行我想要的操作。

这是我的路线

<?php


Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::resource('companies','CompaniesController');
Route::resource('projects','ProjectsController');
Route::resource('roles','RolesController');
Route::resource('tasks','TasksController');
Route::resource('users','UsersController');

在CompaniesController中,我有

 public function update(Request $request, Company $company)
    {

        $companyupdates = Company::where('id', $company->id)->update([
            'name' => $request->input('name'),
            'description' => $request->input('description'),
        ]);

        if($companyupdates){
            return redirect()->route('companies.show', ['company'=>$company->id])->with('success','Company Updated Successfully');
        }
        return back()->withInput();
    }

我要去哪里错了?

1 个答案:

答案 0 :(得分:4)

尝试改用Blade指令:

<form method="post" action="{{ route('companies.update',$company->id) }}">
      @csrf
      @method('PUT')

注意:您无需使用“ []”传递公司ID

在此输入中:

<input type="hidden" name="method" value="put">

根据laravel形式方法欺骗,名称应为_method

文档示例:

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

使用Blade指令:

<form action="/foo/bar" method="POST">
    @method('PUT')
    @csrf
</form>`

为什么会发生此错误?

您在方法输入上输入了错误的名称,因此laravel会将此表单操作识别为POST,而不是PUT。由于这是更新操作,因此laravel会抛出此错误。

  

HTML表单不支持PUT,PATCH或DELETE操作。因此,在定义从HTML表单调用的PUT,PATCH或DELETE路由时,您将需要向表单添加一个隐藏的_method字段。通过_method字段发送的值将用作HTTP请求方法:

有关更多信息:Docs