2012-04-01 64 views
3

我创建的Symfony2的顶部的简单引擎收录的Web应用程序,但我不能让一个全球性的/单/“容器范围的”服务。我可能会犯一个初学者的错误。Symfony2的服务不是单

The symfony2 service container doc表示服务“只创建一次,并且每次请求服务时返回相同的实例”,但是我的服务构造函数在每个请求中都被调用。

我可以从日志很容易地验证这一点。我刚刚刷新/p/new,我看到另一个

[2012-03-31 21:32:56] app.INFO: InMemoryPasteService::__construct() [] [] 

我也证实了记录的

spl_object_hash($this->get('twobulb_paste_service')) 

结果在控制器(和哈希不同的是为每一个请求)。

环境(应用程序/ PROD)似乎并不重要。

How to work with Scopes表示默认范围是“容器”,所以我认为这意味着,应该只有我的服务类的一个实例。

我开始与Symfony的标准分配(不包括供应商)版本2.0.12。

的源代码:

可能类似的帖子:

任何想法?

+0

为什么地球上你会故意使用单身.. **任何事情**!?你的'InMemoryPasteService :: fetchMany()'方法也没有意义。 – 2012-04-01 11:29:07

+0

@tereško对不起,我对编程语言设计了解不多,单身人士可能不是合适的单词。也许[这个文档](http://symfony.com/doc/current/book/service_container.html)将帮助你理解为什么Symfony2鼓励使用服务。至于fetchMany(),代码是一个正在进行的工作。我刚刚更新了这个方法。现在对你有意义吗? – 2012-04-01 22:57:13

回答

11

以这种方式在请求之间没有保存状态。您可以将其视为在每个请求之间重新启动PHP解释器。这就是PHP的工作原理。

2

根据this postspl_object_hash创建的对象的内部指针的MD5哈希值。所以它在请求之间给出不同的散列是正常的。哈希不会在相同的请求周期中更改。