首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 405 MethodNotAllowed

Laravel 405 MethodNotAllowed
EN

Stack Overflow用户
提问于 2018-12-07 17:30:09
回答 3查看 185关注 0票数 2

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

路由

代码语言:javascript
复制
Route::post('/testing/{id}/airbornes/create', [
    'uses' => 'AirborneController@create'
]);

控制器

代码语言:javascript
复制
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]);
}

视图

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-10 08:33:00

据我所知,表单没有href属性。我认为你应该写Action,但是写了href。请在试图提交的表单中指定action属性。

代码语言:javascript
复制
<form method="<POST or GET>" action="<to which URL you want to submit the form>">

就你的情况而言

代码语言:javascript
复制
<form method="POST" ></form>

动作属性丢失了。如果action属性丢失或设置为“”(空字符串),表单将提交给自己(相同的URL)。

例如,您已经将显示表单的路由定义为

代码语言:javascript
复制
Route::get('/airbornes/show', [
    'uses' => 'AirborneController@show'
    'as' => 'airborne.show'
]);

然后提交一个没有action属性的表单。它将将表单提交到它当前所在的同一条路径上,它将使用相同的路径查找post方法,但是您没有使用POST方法的相同路径。因此,您将得到MethodNotAllowed异常。

要么用post方法定义相同的路由,要么显式地指定HTML表单标记的action属性。

假设您的路径定义为:将表单提交给

代码语言:javascript
复制
Route::post('/airbornes/create', [
        'uses' => 'AirborneController@create'
        'as' => 'airborne.create'
    ]);

所以您的表单标记应该是

代码语言:javascript
复制
<form method="POST" action="{{ route('airborne.create') }}">
//your HTML here
</form>
票数 2
EN

Stack Overflow用户

发布于 2018-12-07 22:53:05

HTTP方法所指定的MethodNotAllowedHttpException指示您的路由不可用。可能是因为没有正确地定义它,或者它与另一个类似命名的路由有冲突。

命名路由

考虑使用指定的路由,以便方便地生成URL或重定向。一般情况下,维护起来容易得多。

代码语言:javascript
复制
Route::post('/airborne/create/testing/{id}', [
    'as' => 'airborne.create',
    'uses' => 'AirborneController@create'
]);

Laravel集体

使用Laravel的表单:打开标记并删除表单::token()

代码语言:javascript
复制
{!! 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函数转储给定的变量并结束脚本的执行。反复检查您的机载类是否返回您所期望的对象或标识。

代码语言:javascript
复制
dd($newairborne)

列出可用路由

始终确保所定义的路由、视图和操作匹配。

代码语言:javascript
复制
php artisan route:list --sort name
票数 1
EN

Stack Overflow用户

发布于 2018-12-10 08:46:20

首先是

表单没有href属性,它有"action

代码语言:javascript
复制
<form class="sisform" role="form" method="POST" action="{{ URL::to('AirborneController@create', $id) }}">

二次

如果上面的更改不起作用,您可以进行如下更改:

1.路由

给出你的路线的名称如下:

代码语言:javascript
复制
Route::post('/testing/{id}/airbornes/create', [
    'uses' => 'AirborneController@create',
    'as'   => 'airborne.create',         // <---------------
]);

2.视图

在表单操作中使用route()方法而不是URL::to()方法提供路由名称:

代码语言:javascript
复制
<form class="sisform" role="form" method="POST" action="{{ route('airborne.create', $id) }}">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53674329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档