我试图在程序中创建一个新的“空降”测试,并得到405 MethodNotAllowed异常.
路线
Route::post('/testing/{id}/airbornes/create', [
'uses' => 'AirborneController@create'
]);
控制者
public function create(Request $request, $id)
{
$airborne = new Airborne;
$newairborne = $airborne->newAirborne($request, $id);
return redirect('/testing/' . $id . '/airbornes/' . $newairborne)->with(['id' => $id, 'airborneid' => $newairborne]);
}
视图
<form class="sisform" role="form" method="POST" href="{{ URL::to('AirborneController@create', $id) }}">
{{ csrf_field() }}
{!! Form::token(); !!}
<button type="submit" name="submit" value="submit" class="btn btn-success">
<i class="fas fa-plus fa-sm"></i> Create
</button>
</form>
解决方法:
据我所知,表格没有href属性.我想您应该写Action但写href.
请以您要提交的形式指定操作属性.
<form method="<POST or GET>" action="<to which URL you want to submit the form>">
在你的情况下
<form method="POST" ></form>
并且缺少动作属性.如果缺少动作属性或将其设置为“”(空字符串),则表单将提交给自己(相同的URL).
例如,您已经定义了将表单显示为的路线
Route::get('/airbornes/show', [
'uses' => 'AirborneController@show'
'as' => 'airborne.show'
]);
然后您提交一个没有动作属性的表单.它将把表单提交到当前所在的相同路径,并且它将寻找具有相同路径的post方法,但是使用POST方法则没有相同的路径.因此您将获得MethodNotAllowed异常.
使用post方法定义相同的路由,或者显式指定HTML表单标签的action属性.
假设您的路线定义如下,将表单提交给
Route::post('/airbornes/create', [
'uses' => 'AirborneController@create'
'as' => 'airborne.create'
]);
所以你的表单标签应该像
<form method="POST" action="{{ route('airborne.create') }}">
//your HTML here
</form>