【问题标题】:Laravel 5 setting route parameter from middlewareLaravel 5 从中间件设置路由参数
【发布时间】:2015-12-27 22:06:59
【问题描述】:

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

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

路线:

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);
    }

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

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

谢谢!!

【问题讨论】:

    标签: laravel parameters laravel-5 middleware slug


    【解决方案1】:

    新值不会在路由关闭中作为参数传递。 您需要从$request->request->get('gid'); 获取它 试试dd($gid, $request->request->get('gid')); and compare. 或者$request->gid 将代理到同一个方法调用

    【讨论】:

    • 没错,但这意味着我必须在每条路线中都有一行代码才能将$gid 替换为$request->gid。我想我可能找到了更好的方法
    【解决方案2】:

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

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

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

    任何反馈,我很想知道我是否在这里做一些愚蠢的事情?

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

    【讨论】:

    • 如果您需要从例如访问此参数中间件:Route::getCurrentRoute()->parameters();
    • 如果你尝试这样做,你会得到空值。由于当前路线实际上尚未设置。试过那个。
    • 你在哪里定义这些路由绑定?我之前在中间件中使用过路由参数没有问题。我在App\Providers\RouteProvider 中定义了路由绑定
    猜你喜欢
    • 2019-06-16
    • 2023-04-04
    • 2015-08-06
    • 2015-06-25
    • 2020-08-31
    • 2015-08-12
    • 2016-02-14
    • 2015-04-17
    • 2018-04-07
    相关资源
    最近更新 更多