2017-08-24 30 views
1

我需要从之前得到一个变量的硅石,并获得它的中间件外: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 "" :'(

感谢

回答

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! 

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