使用 Laravel 5 方法注入和其他参数

Using Laravel 5 Method Injection with other Parameters

所以我正在开发管理界面。我的路线设置如下:

Route::controllers([
    'admin' => 'AdminController',
]);

然后我有一个带有一些方法的控制器:

public function getEditUser($user_id = null)
{
    // Get user from database and return view
}

public function postEditUser($user_id = 0, EditUserRequest $request)
{
    // Process any changes made
}

如您所见,我正在使用方法注入来验证用户输入,因此 URL 看起来像这样:

http://example.com/admin/edit-user/8697

GET 请求将转到 GET 方法,而 POST 请求将转到 POST 方法。问题是,如果我创建一个新用户,将不会有 ID:

http://examplecom/admin/edit-user/

然后我得到一个错误(解释):

Argument 2 passed to controller must be an instance of EditUserRequest, none given

所以现在我正在传递一个 0 的 ID 以使其能够用于创建新用户,但是这个应用程序才刚刚开始,所以我是否必须在整个应用程序中都这样做?有没有更好的方法来传递验证方法和可选参数?任何智慧将不胜感激。

您可以颠倒参数的顺序,因此可选参数是结尾:

public function postEditUser(EditUserRequest $request, $user_id = null)
{

}

Laravel 然后将首先解析 EditUserRequest,如果没有 user_id,则不再传递任何内容,因此默认值将生效。