如何将没有参数的Laravel路由重定向到具有默认参数的控制器方法?

时间:2017-09-26 15:31:02

标签: php laravel laravel-5

在Laravel 5.5 API中假设以下路由:

// custom routes for THIS user (the user making the request)
Route::get('/user', 'UserController@show');
Route::get('/user/edit', 'UserController@edit');

// register CRUDdy resource routes for users
Route::resource('users', 'UserController');

让我们以edit为例:

public function edit(User $user)
{
    ...
}

如您所见,编辑路线包含类型提示的$user参数。正如预期的那样,这适用于users/13/edit路由。但是,我要配置路由/user/edit以将$request->user()用户对象传递给该函数。我不想在实际edit方法中检查用户对象,因为这可能会影响其他验证(例如,我不想默认为当前用户如果有人传递了不存在的用户ID,我希望在这种情况下返回错误。)

简而言之:如何注册路由以首先创建参数,然后将其传递给给定的控制器方法?我的第一个想法是使用一个闭包:

Route::get('/user/edit', function(Request $request){
    $user = $request->user();
});

但是一旦进入关闭状态,我不确定如何将请求转发到适当的控制器方法。

1 个答案:

答案 0 :(得分:1)

您可以创建一个新的控制器方法来代替关闭,该方法使用当前用户调用edit。

让我们说你的路线是这样的:

Route::get('/user/edit', 'UserController@editSelf');

然后在你的控制器中:

public function editSelf(Request $request)
{
    $this->edit($request->user());
}