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

Php Silex在中间件上保存变量并在控制器上访问它,php,symfony,frameworks,middleware,silex,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;

我需要从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 "" :'(
谢谢

您(错过了)在值真正定义之前就期待它了。你可以:

$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!
请注意,您定义了before中间件,并立即检查承载值。但是在这一步中,中间件还没有执行!一旦运行
$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!
});
在实际定义之前,您(未命中)期望值。你可以:

$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!
请注意,您定义了before中间件,并立即检查承载值。但是在这一步中,中间件还没有执行!一旦运行
$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!
});