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

Posted

技术标签:

【中文标题】如何将没有参数的 Laravel 路由重定向到具有默认参数的控制器方法?【英文标题】:How can I redirect a Laravel route without a parameter to a controller method with a default parameter? 【发布时间】: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标签 是的,资源路线是由工匠生成的。我想添加其他路线,就像我在问题中所说的那样。 【参考方案1】:

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

假设你的路线是这样的:

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

然后在你的控制器中:

public function editSelf(Request $request)

    $this->edit($request->user());

【讨论】:

这似乎是处理场景最直接和最典型的方式,谢谢!

以上是关于如何将没有参数的 Laravel 路由重定向到具有默认参数的控制器方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Laravel 5 重定向到没有哈希(#)的 Angular 路由?

使用 Laravel 重定向到路由而不获取参数

Laravel 8 Jetstream如何在重置密码后将用户重定向到自定义路由

如何在 Laravel 4 中将一个路由重定向到 HTTPS,将所有其他路由重定向到 HTTP?

Laravel 5.5登录后重定向到特定路由

laravel 4重定向到带有2个参数的路由