Laravel 5从中间件设置路由参数

Laravel 5从中间件设置路由参数,laravel,parameters,laravel-5,middleware,slug,Laravel,Parameters,Laravel 5,Middleware,Slug,问题是:如果slug被用作路由参数而不是id,我想解决slug 尝试的解决方案: 我目前正在中间件中从请求中获取一个参数,并尝试将其设置回请求。但这似乎没有传递到路由(它被传递到后续中间件) 路线: Route::get('view_events/{gid}', array('as' => 'view_events','middleware' => ['auth','resolveGroupSlug','groupAdmin'], function($gid) { $use

问题是:如果slug被用作路由参数而不是id,我想解决slug

尝试的解决方案: 我目前正在中间件中从请求中获取一个参数,并尝试将其设置回请求。但这似乎没有传递到路由(它被传递到后续中间件)

路线:

Route::get('view_events/{gid}', array('as' => 'view_events','middleware' => ['auth','resolveGroupSlug','groupAdmin'], function($gid) 
{
    $user = Auth::user();
    $group = Team::find($gid);
    echo $gid;
      //get this user's relationship to group
    $group["team_user"] = Users_team::findComposite($gid,$user["id"]);
    $events = Helpers::getEvents($gid,0);
    return View::make('view_events', array('user' => $user, 'group' => $group, 'events' => $events));
}));
中间件(resolveGroupSlug):

如何在中间件中设置路由参数?或者如果有一种更简单的方法

(不,我不会将中间件代码复制粘贴到我需要的每个路由中!)


谢谢

新值不会作为参数在路由关闭中传递。 您需要从
$request->request->get('gid')获取它
尝试
dd($gid,$request->request->get('gid');并进行比较。

或者,
$request->gid
将代理相同的methodcall

最后,我没有使用middlewhere,而是将一个函数绑定到具有gid的路由,如下所示

Route::bind('gid', function($gid)
{
    $group = Team::where('slug', '=', $gid)->orWhere('id', '=', $gid)->first();
    $gid = $group->id;
    return $gid;
});
这意味着所有现有的代码将继续工作,无论人们是通过ID还是SLUG链接

任何反馈,我想知道我是否在做傻事


显然,我现在意识到我可以将组直接传递给控制器,但我的一些控制器只在id之后,而不是整个组,因此这给了我最大的灵活性。

这是真的,但这意味着我必须在每条路由中都有一行代码,才能将
$gid
替换为
$request->gid
。如果您需要从中间件(例如:
Route::getCurrentRoute()->parameters())访问此参数,我想我可能已经找到了更好的方法如果你尝试,你会得到空值。因为目前的路线还没有确定。你试过了吗?你在哪里定义这些路由绑定?我以前在中间件中使用过route参数,没有任何问题。我在
App\Providers\RouteProvider
Route::bind('gid', function($gid)
{
    $group = Team::where('slug', '=', $gid)->orWhere('id', '=', $gid)->first();
    $gid = $group->id;
    return $gid;
});