我正在尝试在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();
}
我要去哪里错了?
答案 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