2016-01-08 24 views
0

有时laravel调用另一个途径,而不是真正的

在laravel routes.php文件,我有下面的代码:

// User Resourceful Routing 
Route::resource('user','UserController'); 

默认情况下delete路线去的UserControllershow方法。为了克服这个问题,我已经在laravel routes.php写这条路线:

// Delete Users Route 
Route::get('user/{user}/{flag}', ['uses' => '[email protected]', 'as'=>'user.destroy'])->before('permission:user_delete'); 

它仍然工作正常,我,但有时(2出来的10倍),它进入的UserControllershow方法,而不是destroy方法。

// Destroy method 
public function destroy($id,$flag='normal'){ 
} 

您的建议非常感谢。

+0

使用资源控制器时,您必须使用正确的HTTP方法,例如GET,POST,DELETE。如果你没有在请求中使用'DELETE'方法,Laravel会认为你正在使用'GET'方法,并将调用'show()'而不是'destroy()'。 –

+0

@MikeRockett:我知道这一点,但通过API您可以选择删除方法,但浏览器没有删除方法。当你通过浏览器发出请求时,就会出现这个问题。 –

+0

它有时只发生。其他时候它对我来说工作得很好。 –

回答

2

您应该使用'delete'方法而不是get。

你可以在这样的laravel中使用。

{!! Form::open(['action' => ['[email protected]', $user->id], 'method' => 'delete']) !!} 
    {!! Form::submit('Delete User') !!} 
{!! Form::close() !!} 

而且,如果您使用的是ajax,您可以像这样使用。

$.ajax({ 
     type: "DELETE", 
     url: 'users/' + user_id, 
     success: function(affectedRows) { 
     } 
    }); 

如果你不想使用laravel的默认destroy方法,那么你可以使用DELETE_USER法后的行动。

+0

浏览器没有删除方法。 laravel delete方法仅适用于API。 –

+0

我编辑了我的答案 –

+0

DELETE方法并非全部适用于所有浏览器。即使jQuery官方文档没有在ajax中展示这种类型的方法。无论如何感谢您的答案+1。 –

0

明确定义你的路线,而不是使用资源,毕竟他们是3或4.除了销毁方法。

然而,我会开始调试当前路线php artisan route:list并检查您的端点。发送请求时可能在某处丢失了某个参数。

+0

我曾试过这个麻烦。我运行了php手工路线并获得了所有路线。感谢您的建议。这是我所做的第一步。 –

相关问题