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

时间:2015-09-30 07:50:43

标签: laravel parameters laravel-5 middleware slug

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

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

路线:

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):

public function handle($request, Closure $next)
    {
        //convert a string gid to id number
        if (is_string ($request->gid)) {
            $group = Team::where('slug', '=', $request->gid)->firstOrFail();
            $request['gid'] = $group->id;
            echo $request->gid;
        }
        return $next($request);
    }

如何在中间件中设置路由参数?或者,如果有一种更简单的方法可以做到这一点。

(不,我不打算将中间件代码粘贴到我需要的每条路线中!)

谢谢!

2 个答案:

答案 0 :(得分:1)

新值不会作为路由闭包中的参数传递。 你需要从$request->request->get('gid');得到它 试试dd($gid, $request->request->get('gid')); and compare. 或者$request->gid将代理相同的方法调用

答案 1 :(得分:1)

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

Route::bind('gid', function($gid)
{
    $group = Team::where('slug', '=', $gid)->orWhere('id', '=', $gid)->first();
    $gid = $group->id;
    return $gid;
});

这意味着所有现有代码都将继续工作,无论人们是通过ID还是slug进行链接。

任何反馈,我都想知道我在这里做些蠢事吗?

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