Laravel 405异常MethodNotAllowed

时间:2018-12-07 17:30:10

标签: php laravel routes laravel-routing laravel-exceptions

我正在尝试在程序中创建一个新的“空降”测试,并得到405 MethodNotAllowed异常。

路线

import React from 'react';

import './Square.css';

const Square = (props) => {

  return (
    <div className='square square__elem' style={{backgroundColor: props.color}}></div>
  );
};

export default Square;

控制器

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]);
}

3 个答案:

答案 0 :(得分:2)

据我所知,表单没有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>

答案 1 :(得分:1)

MethodNotAllowedHttpException表示您的路由不适用于指定的HTTP请求方法。也许是因为未正确定义它,或者它与另一个类似名称的路由存在冲突。

命名路线

考虑使用命名路由来方便地生成URL或重定向。它们通常更容易维护。

Route::post('/airborne/create/testing/{id}', [
    'as' => 'airborne.create',
    'uses' => 'AirborneController@create'
]);

Laravel集体

使用Laravel Collective的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函数转储给定的变量并结束脚本的执行。仔细检查您的机载类是否返回您期望的对象或ID。

dd($newairborne)

列出可用路线

始终确保定义的路线,视图和动作匹配。

php artisan route:list --sort name

答案 2 :(得分:0)

首先
表单没有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) }}">