【问题标题】:How can I redirect a Laravel route without a parameter to a controller method with a default parameter?如何将没有参数的 Laravel 路由重定向到具有默认参数的控制器方法?
【发布时间】:2018-03-07 22:00:09
【问题描述】:

假设 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() 用户对象传递给函数。我不想检查用户对象 in 实际的edit 方法,因为这可能会干扰其他验证(例如,如果有人通过,我不想默认为当前用户一个不存在的用户 ID,我想在这种情况下返回一个错误)。

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

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

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

【问题讨论】:

  • 你确定这个函数是由工匠生成的,比如使用--resource标签
  • 是的,资源路线是由工匠生成的。我想添加其他路线,就像我在问题中所说的那样。

标签: php laravel laravel-5


【解决方案1】:

您可以创建一个新的控制器方法来调用当前用户的编辑,而不是闭包。

假设你的路线是这样的:

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

然后在你的控制器中:

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

【讨论】:

  • 这似乎是处理场景最直接和最典型的方式,谢谢!
猜你喜欢
  • 2014-08-24
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 2017-12-30
相关资源
最近更新 更多