Laravel 5将数据从中间件传递到控制器

时间:2015-05-21 12:55:37

标签: laravel-5

我的中间件类似于Auth。它检查URL模式(例如:/ rest / *),然后在请求中查找令牌,从数据库中检索其对应的用户。之后,我想将该用户保存在变量中,以便稍后可以在以下任何控制器中返回它。什么是最好的方式?

中间件:

public function handle($request, Closure $next)
{
    $token = Input::get("token");
    // get user data from database
    $user = User::get_user_from_token($token);
    // ?? -> How to pass $user to controller, so that ..
    return $next($request);
}

在控制器中:

public function profile_save() {
    // I get the user back here without querying again
    $user = ???
}

2 个答案:

答案 0 :(得分:7)

我会将数据刷新到会话中。当您闪存数据时,它只会在下一个请求之前停留在那里。

在您的中间件添加

Session::flash('user', $user);

别忘了在中间件的顶部添加它

use Session;

然后,只要您需要访问您的用户

Session::get('user');

以下是文档的链接以供参考 http://laravel.com/docs/5.0/session#flash-data

答案 1 :(得分:1)

我正在使用Laravel 5.1。 要将参数从中间件传递到控制器,可以将其添加到Request对象。

在中间件中:

public function handle($request, Closure $next)
{
    $user = 'DB Call To Get User';
    $age = 20;
    $request->route()->setParameter('user', $user);
    $request->route()->setParameter('age', $age);
    return $next($request);
}

然后,您可以从参数中获取控制器中的用户:

public function TestAction(Request $request, User $user, $age)
{}

或者明确地来自请求对象:

public function TestAction(Request $request)
{
    $user = $request->route()->getParameter('user');
    $age = $request->route()->getParameter('age');
}

当然,您可以暂时将数据刷新到会话或将其保存到会话本身并设置到期时间,但如果您只需要它持续请求的生命周期,那么我认为这是一个好方法。

希望这有帮助!