Laravel 异常 405 MethodNotAllowed
Laravel Exception 405 MethodNotAllowed
我正在尝试在我的程序中创建一个新的 "Airborne" 测试并收到 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>
MethodNotAllowedHttpException
表示您的路由不适用于指定的 HTTP 请求方法。也许是因为它定义不正确,或者它与另一个类似命名的路由有冲突。
命名路由
考虑使用命名路由来方便地生成 URL 或重定向。它们通常更容易维护。
Route::post('/airborne/create/testing/{id}', [
'as' => 'airborne.create',
'uses' => 'AirborneController@create'
]);
Laravel集体
使用Laravel集体的Form:open标签并移除Form::token()
{!! Form::open(['route' => ['airborne.create', $id], 'method' =>'post']) !!}
<button type="submit" name="submit" value="submit" class="btn btn-success">
<i class="fas fa-plus fa-sm"></i> Create
</button>
{!! Form::close() !!}
dd() 辅助函数
dd 函数转储给定的变量并结束脚本的执行。仔细检查您的 Airborne class 是否返回了您期望的对象或 ID。
dd($newairborne)
列出可用路线
始终确保您定义的路线、视图和操作相匹配。
php artisan route:list --sort name
据我所知,表单没有 href 属性。我想你应该写 Action 但写了 href。
请在您尝试提交的表单中指定 action 属性。
<form method="<POST or GET>" action="<to which URL you want to submit the form>">
在你的情况下
<form method="POST" ></form>
并且缺少操作属性。如果 action 属性缺失或设置为“”(空字符串),表单将提交给自身(相同 URL)。
比如你定义了显示表单的路由为
Route::get('/airbornes/show', [
'uses' => 'AirborneController@show'
'as' => 'airborne.show'
]);
然后你提交了一个没有 action 属性的表单。它会将表单提交到当前所在的同一路线,并且会寻找具有相同路线的 post 方法,但您没有具有 POST 方法的相同路线。所以你得到 MethodNotAllowed 异常。
要么使用 post 方法定义相同的路由,要么明确指定 HTML 表单标签的操作属性。
假设您定义了一条路由,将表单提交至
Route::post('/airbornes/create', [
'uses' => 'AirborneController@create'
'as' => 'airborne.create'
]);
所以你的表单标签应该像
<form method="POST" action="{{ route('airborne.create') }}">
//your HTML here
</form>
首先
表单没有 href 属性,它有“action
”
<form class="sisform" role="form" method="POST" action="{{ URL::to('AirborneController@create', $id) }}">
其次
如果上述更改不起作用,您可以进行一些更改,例如:
1.路线
将您的路线命名为:
Route::post('/testing/{id}/airbornes/create', [
'uses' => 'AirborneController@create',
'as' => 'airborne.create', // <---------------
]);
2。查看
在表单操作中使用 route()
方法而不是 URL::to()
方法给出路由名称:
<form class="sisform" role="form" method="POST" action="{{ route('airborne.create', $id) }}">
我正在尝试在我的程序中创建一个新的 "Airborne" 测试并收到 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>
MethodNotAllowedHttpException
表示您的路由不适用于指定的 HTTP 请求方法。也许是因为它定义不正确,或者它与另一个类似命名的路由有冲突。
命名路由
考虑使用命名路由来方便地生成 URL 或重定向。它们通常更容易维护。
Route::post('/airborne/create/testing/{id}', [
'as' => 'airborne.create',
'uses' => 'AirborneController@create'
]);
Laravel集体
使用Laravel集体的Form:open标签并移除Form::token()
{!! Form::open(['route' => ['airborne.create', $id], 'method' =>'post']) !!}
<button type="submit" name="submit" value="submit" class="btn btn-success">
<i class="fas fa-plus fa-sm"></i> Create
</button>
{!! Form::close() !!}
dd() 辅助函数
dd 函数转储给定的变量并结束脚本的执行。仔细检查您的 Airborne class 是否返回了您期望的对象或 ID。
dd($newairborne)
列出可用路线
始终确保您定义的路线、视图和操作相匹配。
php artisan route:list --sort name
据我所知,表单没有 href 属性。我想你应该写 Action 但写了 href。 请在您尝试提交的表单中指定 action 属性。
<form method="<POST or GET>" action="<to which URL you want to submit the form>">
在你的情况下
<form method="POST" ></form>
并且缺少操作属性。如果 action 属性缺失或设置为“”(空字符串),表单将提交给自身(相同 URL)。
比如你定义了显示表单的路由为
Route::get('/airbornes/show', [
'uses' => 'AirborneController@show'
'as' => 'airborne.show'
]);
然后你提交了一个没有 action 属性的表单。它会将表单提交到当前所在的同一路线,并且会寻找具有相同路线的 post 方法,但您没有具有 POST 方法的相同路线。所以你得到 MethodNotAllowed 异常。
要么使用 post 方法定义相同的路由,要么明确指定 HTML 表单标签的操作属性。
假设您定义了一条路由,将表单提交至
Route::post('/airbornes/create', [
'uses' => 'AirborneController@create'
'as' => 'airborne.create'
]);
所以你的表单标签应该像
<form method="POST" action="{{ route('airborne.create') }}">
//your HTML here
</form>
首先
表单没有 href 属性,它有“action
”
<form class="sisform" role="form" method="POST" action="{{ URL::to('AirborneController@create', $id) }}">
其次
如果上述更改不起作用,您可以进行一些更改,例如:
1.路线
将您的路线命名为:
Route::post('/testing/{id}/airbornes/create', [
'uses' => 'AirborneController@create',
'as' => 'airborne.create', // <---------------
]);
2。查看
在表单操作中使用 route()
方法而不是 URL::to()
方法给出路由名称:
<form class="sisform" role="form" method="POST" action="{{ route('airborne.create', $id) }}">