Symfony2:每个服务调用的新实例,而不是使用相同的

ram*_*mlo 3 php symfony

我创建了一个服务,但每次调用它时,它都会创建一个新实例,而不是使用相同的实例.这是我的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的工作原理.每个请求都是独立的.虽然您可以共享一些数据(例如在会话中),但在单个请求中创建的所有对象在完成后都会被销毁.下次进入服务器时,需要重新创建所有内容.

  • 如果有帮助请接受我的回答. (4认同)