如何在silex应用程序中避免请求范围异常?

时间:2016-02-10 18:43:25

标签: php request silex

在重构我的silex1.2应用程序之后,我现在受到了:

  

异常'RuntimeException',消息'访问请求服务   请求范围之外。尝试将该调用移至before handler或   控制器“。在   ../供应商/硅石/硅石/ SRC /捷希凯/ Application.php:150

我曾经这样设置appilcation的配置:

$app = new Silex\Application();
$app->register(new ServiceControllerServiceProvider());
$app->register(new ConfigServiceProvider($configFile));
$fileFinder = new \Symfony\Component\Finder\Finder();
foreach ($fileFinder->in($configPath . 'country') as $file) {
   /* @var SplFileInfo $file */
    $app->register(new ConfigServiceProvider($file->getRealPath()));
}

我现在想要通过注入我从用户请求获得的特定值来替换foreach循环。所以我想访问$request->query->get('country');但是我不能因为那时app['request']超出了范围。

我不明白错误信息,如:

  • 何时以及为什么请求对象超出了silex的范围?
  • 在设置我的应用程序时,我应该如何在处理程序和控制器之前移动调用?

基本上,我想尽早访问请求数据以获取一个值。如何实现相应的引导应用程序?

1 个答案:

答案 0 :(得分:4)

Request之前,您尝试在$app->run()初始化之前使用Request 您可以手动初始化$app = new \Silex\Application(); $app['request'] = \Symfony\Component\HttpFoundation\Request::createFromGlobals(); ..... $app->run($app['request']);

$app['object1'] = $app->share(function ($app) {
    return new Object1($app['request']->query->get('country'));
});
...

或在服务提供商中进行延迟加载:

$app['object1']

和控制器中的某个地方将这些变量设为return{ setUser : function(nome, cognome, tipo){ user.nome=nome; user.cognome=cognome; user.tipo=tipo; }, isLoggedIn : function(){ if(user.nome!==undefined){ return false; }else{ return true; } }, utente : function(){ return user; } };