我正在尝试在 Laravel 中提交表单,但收到错误The POST method is notsupported for thisroute。支持的方法: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>
Run Code Online (Sandbox Code Playgroud)
将 post 替换为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');
Run Code Online (Sandbox Code Playgroud)
在 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();
}
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
尝试使用 Blade 指令来代替:
<form method="post" action="{{ route('companies.update',$company->id) }}">
@csrf
@method('PUT')
Run Code Online (Sandbox Code Playgroud)
注意:您不需要使用 '[ ]' 传递公司 ID
在此输入中:
<input type="hidden" name="method" value="put">
Run Code Online (Sandbox Code Playgroud)
名称应该_method按照laravel表单方法欺骗
文档中的示例:
<form action="/foo/bar" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
Run Code Online (Sandbox Code Playgroud)
使用刀片指令:
<form action="/foo/bar" method="POST">
@method('PUT')
@csrf
</form>`
Run Code Online (Sandbox Code Playgroud)
为什么会出现这个错误?
您在方法输入中输入了错误的名称,因此 Laravel 会将此表单操作识别为 POST,而不是 PUT。由于这是一个更新操作,laravel 会抛出这个错误。
HTML 表单不支持 PUT、PATCH 或 DELETE 操作。因此,在定义从 HTML 表单调用的 PUT、PATCH 或 DELETE 路由时,您需要向表单添加隐藏的 _method 字段。与 _method 字段一起发送的值将用作 HTTP 请求方法:
欲了解更多信息:文档
| 归档时间: |
|
| 查看次数: |
2670 次 |
| 最近记录: |