php - 为什么 Post 方法在 Laravel 中给出错误 MethodNotAllowedHttpException
问题描述
我正在尝试在 Laravel 中提交表单,但收到错误消息:此路由不支持 POST 方法。支持的方法:GET、HEAD、PUT、PATCH、DELETE。
我已经尝试了laravel 中 post 方法中的建议给 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替换 post ,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();
}
我哪里错了?
解决方案
尝试改用刀片指令:
<form method="post" action="{{ route('companies.update',$company->id) }}">
@csrf
@method('PUT')
注意:您不需要使用 '[ ]' 传递公司 ID
在此输入中:
<input type="hidden" name="method" value="put">
名字要_method
按照laravel表单方法spoofing
文档中的示例:
<form action="/foo/bar" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
使用刀片指令:
<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 请求方法:
欲了解更多信息:文档
推荐阅读
- c - 来自 strtok 的分段错误
- mongodb - 在猫鼬中定义时间属性
- python - 在操作列表或字符串时,最有效的迭代方法是什么?
- r - 如何在数学上转换 ggplot 中图例上的默认标签?
- java - 使用 JAR 中的文件,同时从 jar 中运行应用程序
- amazon-s3 - s3 presinged url nginx反向代理错误 - SignatureDoesNotMatch
- android - 在已编译的应用程序中运行 Flutter builder runner
- python - X.shape[1] 大小不符合预期值
- django - 通过分组在Django中显示数据
- azure - OAuth 同意表单是否需要 Azure 的 User.Read 权限?