Laravel:Route :: resource()GET& POST工作,但是PUT& DELETE抛出MethodNotAllowedHttpException

时间:2014-11-19 23:27:42

标签: php laravel routes url-routing

我正在编写一个webservice API(在laravel 4.2中) 出于某种原因,基于HTTP方法,到我的一个控制器的路由选择性地失败。

我的routes.php看起来像:

Route::group(array('prefix' => 'v2'), 
    function()
    {
        Route::resource('foo', 'FooController',
            [ 'except' => ['edit', 'create'] ]
            );
        Route::resource('foo.bar', 'FooBarController',
            [ 'except' => ['show', 'edit', 'create'] ]
            );
    }
);

所以,当我尝试任何GET / POST / PUT / PATCH / DELETE方法时 project.dev/v2/fooproject.dev/v2/foo/1234网址,一切正常。

但是,出于某种原因,只有GET和POST适用于project.dev/v2/foo/1234/bar。其他方法只抛出405(MethodNotAllowedHttpException) (是的,我通过 Advanced Rest Client Chrome扩展程序发出请求。)

发生了什么事? 我错过了什么?

5 个答案:

答案 0 :(得分:18)

解决!
可以通过运行php artisan routes找到答案。

这表明DELETE和PUT / PATCH期望(需要)一个条形码 我碰巧忽略了这一点,因为只有一种特殊类型的" bar"。只需将其简单地添加到我的网址即可轻松解决,例如project.dev/v2/foo/1234/bar/5678

答案 1 :(得分:6)

对于使用Laravel版本的用户> 4.2使用此:

php artisan route:list

这将给出应用程序中设置的路径列表。检查路由中是否允许PUT和DELETE的路由。 405错误主要是因为这些方法没有路由。

答案 2 :(得分:0)

我不了解旧的Laravel版本。但是我从5.2开始使用Laravel,在使用put,patch或delete时需要包含一个隐藏的方法输入。

例如:

<input type="hidden" name="_method" value="PUT"> 

检查https://laravel.com/docs/5.6/routing#form-method-spoofing

答案 3 :(得分:0)

只需在表单中添加一个隐藏的输入字段

    <input type="hidden" name="_method" value="PUT">

并将表单方法保留为发布

    <form method="post" action="{{action('')}}">

答案 4 :(得分:0)

如果您想在提交表单中使用方法PUT,请桅杆查看此链接 https://laravel.com/docs/5.6/routing#form-method-spoofing

但是,如果您在项目中使用ajax,则可以进行以下操作:

<form>
@method('PUT')
// your_element

在脚本上添加:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

$.ajax({
  url: {{ route('your_route', ':id') }},
  type: 'POST',
  data: data,
  dataType: 'json',
  cache: false,
}).done(function(data,status){
    // anything
}).fail(function(){
   // anything

});