如何将没有参数的 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 8 Jetstream如何在重置密码后将用户重定向到自定义路由