Laravel删除方法不允许

时间:2019-04-07 07:36:30

标签: php laravel

我正在编写laravel api,当我尝试进行删除和发布请求时,我一直在获取方法不允许的异常。我应该去哪里诊断这个问题?

我已经阅读了有关此问题的大多数其他文章,这就是我尝试过/看过的内容。 •确保路由语法正确

•确保它与其他路线没有冲突

•确保使用正确的路由(运行php artisan route:list到   仔细检查)

•修改了.htaccess文件夹(也许我做错了)以允许GET,POST,PUT,DELETE

这是api.php中路由的样子

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});
Route::delete('delete/{id}', 'LoginController@delete');
Route::get('stuff', 'LoginController@index');
Route::get('stuff1/{Username}', 'LoginController@show');

这是控制器中的功能

 public function delete(Request $request, $id) {

        $user = Login::find($id);
        $user->delete();
        return "204";
    }

这是我的.htaccess

   <IfModule mod_rewrite.c>
   <IfModule mod_negotiation.c>
       Options -MultiViews
   </IfModule>

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

 <Limit GET POST PUT DELETE>
 Allow from all
</Limit>
</IfModule>

我可以通过将Route :: delete()更改为Route :: get()并实现相同的功能来解决此问题,但这似乎不是标准做法。

1 个答案:

答案 0 :(得分:0)

您必须设置ajax类型POST,但发送一个名为_method的参数,其值具有delete,如下所示:

$.ajax({
        type: "POST",
        data:{
         _method:"DELETE"
        },
        url: productRoute,
        headers: { 'X-CSRF-TOKEN' : productToken }
    });

或者因为您使用了laravel html表单帮助程序,所以它会自动生成_method隐藏输入,所以您最好发送所有表单输入,例如令牌和方法,如下所示:

 function()
{

    var formData=$('#yourForm').serialize();
    $.ajax({
        type: "POST",
        url: productRoute,
        data:formData
    })
});