3

サービスを作成しましたが、それを呼び出すたびに、同じインスタンスを使用する代わりに新しいインスタンスが作成されます。ここに私のservices.ymlがあります:

my.sessiondata:
    class: My\Bundle\Service\SessionData
    calls:
        - [ setServices, [@security.context, @service_container, @session, @doctrine.orm.entity_manager] ]
    scope: container

そして私のサービス:

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

次のようなコントローラーでサービスを呼び出します。

    $sessionData = $this->container->get('my.sessiondata');

コントローラーを呼び出すたびに、ビューに NULL'TEST' が表示され続けます。

インスタンスが失われた理由は何ですか?

4

2 に答える 2

14

1回のリクエストで、電話をかけるたびに

$this->container->get('my.sessiondata')

スコープがコンテナ(デフォルト)に設定されている限り、同じインスタンスを取得します。

コンテナはリクエスト間でインスタンスを共有しません。これがPHPの仕組みです。各リクエストは独立しています。一部のデータ(セッションなど)を共有することはできますが、1回のリクエストで作成されたすべてのオブジェクトは、リクエストが終了すると破棄されます。次にサーバーにアクセスしたときに、すべてを再作成する必要があります。

于 2012-07-14T19:20:39.730 に答える