我创建了一个服务,但每次调用它时,它都会创建一个新实例,而不是使用相同的实例.这是我的services.yml:
my.sessiondata:
class: My\Bundle\Service\SessionData
calls:
- [ setServices, [@security.context, @service_container, @session, @doctrine.orm.entity_manager] ]
scope: container
Run Code Online (Sandbox Code Playgroud)
我的服务:
namespace My\Bundle\Service;
class SessionData
{
protected $company;
public function setServices($securityContext, $serviceContainer, $session, $em)
{
var_export($this->company);
if (!$this->company)
{
$this->company = "TEST";
var_export($this->company);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在这样的控制器中调用该服务:
$sessionData = $this->container->get('my.sessiondata');
Run Code Online (Sandbox Code Playgroud)
每当我调用控制器时,视图都会保持dip'ying NULL'TEST'.
知道为什么实例丢失了吗?
Jak*_*las 14
在一次请求期间,每次打电话
$this->container->get('my.sessiondata')
Run Code Online (Sandbox Code Playgroud)
只要将范围设置为容器(默认值),您将获得相同的实例.
Container不会在请求之间共享实例.这就是PHP的工作原理.每个请求都是独立的.虽然您可以共享一些数据(例如在会话中),但在单个请求中创建的所有对象在完成后都会被销毁.下次进入服务器时,需要重新创建所有内容.