Silex在中间件上保存变量并在控制器上访问它

时间:2017-08-24 08:50:48

标签: php symfony frameworks middleware silex

我需要从之前的silex获取一个变量,并在中间件之外访问它:

 $app->before(function (Request $request, Application $app) {
    if ($request->getMethod() !== "OPTIONS") {
        $bearer = $request->headers->get('Authorization');
        $app["bearer"] = $bearer; 
        echo $app["bearer"]; // Works and display value
    }
    return null;
}, Application::EARLY_EVENT);
echo $app["bearer"]; // Don't works, Display "" :'(

由于

1 个答案:

答案 0 :(得分:0)

你是(小姐)在真正定义之前期待它的价值。你这样做:

$app->before(function (Request $request, Application $app) {
    if ($request->getMethod() !== "OPTIONS") {
        $app["bearer"] = $request->headers->get('Authorization');
    }
    return null;
}, Application::EARLY_EVENT);

echo $app["bearer"]; // WRONG!

请注意,您定义了之前的中间件并立即检查 bearer 值。但是在这一步中,中间件还没有被执行!在任何控制器之前运行$app->run();后,中间件就会执行。因此,在您的控制器中,您可以检查值,但不能在执行$app->run()方法(触发中间件)之前检查。你可以试试,例如:

$app->before(function (Request $request, Application $app) {
    if ($request->getMethod() !== "OPTIONS") {
        $app["bearer"] = $request->headers->get('Authorization');
    }
    return null;
}, Application::EARLY_EVENT);


$app->get('/some-route', function(Aplication $app) {
  echo $app["bearer"]; // Right!
});