2017-08-24 1 views
1

je dois obtenir une variable d'avant le Silex, et l'accès à l'extérieur du middleware:variables d'économie Silex sur middleware et acces sur le contrôleur

$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 "" :'(

Merci

Répondre

0

Vous êtes (miss) attend la valeur avant qu'il ne soit vraiment défini. Vous faites:

$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! 

Notez que vous définissez le middleware avant et vérifier immédiatement la valeur porteur. Mais dans cette étape, le middleware n'est pas encore exécuté! Le middleware est exécuté une fois que vous exécutez $app->run();, avant tout contrôleur. Ainsi, dans vos contrôleurs, vous pouvez vérifier la valeur, mais pas avant d'exécuter la méthode $app->run() (qui déclenche les middlewares). Vous pouvez essayer, pour exemple:

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