2016-05-23 9 views
1

私はSymfony DIを使って、同じクラスのオブジェクトをさまざまなプロパティ値で取得しようとしていますが、同じオブジェクトを受け取ります。私はSymfonyのdocを探求しようとしましたが、私は答えを見つけることができません。Symfony Dependency Injection(Recursively)で同じクラスの複数のオブジェクトを取得するには?

<?php 

use Symfony\Component\DependencyInjection\ContainerBuilder; 


class Foo 
{ 
    public $container; 
    public $booCollection = []; 

    public function __construct() 
    { 
     $this->container = $container = new ContainerBuilder(); 
     $this->container->setParameter('id', ''); 
     $this->container->register('boo', 'Boo') 
      ->addArgument('%booid%'); 
    } 

    public function getListOfBoo() 
    { 
     for ($id = 1; $id <= 2; $id++) { 
      $this->container->setParameter('booid', $id); 
      $this->booCollection[] = $this->container->get('boo'); 
     } 
    } 
} 

class Boo 
{ 
    public $id; 
    public function __construct($id) 
    { 
     $this->id = $id; 
    } 
} 

$foo = new Foo(); 
$foo->getListOfBoo(); 

var_dump($foo->booCollection); 
?> 

結果:

array (size=2) 
    0 => 
     object(Boo)[32] 
     public 'id' => int 1 
    1 => 
     object(Boo)[32] 
     public 'id' => int 1 

しかし、私がする必要がある:

array (size=2) 
    0 => 
     object(Boo)[32] 
     public 'id' => int 1 
    1 => 
     object(Boo)[32] 
     public 'id' => int 2 

答えて

1

あなたはプロトタイプのスコープ(symfonyの< 2.8)を使用したり、サービス定義をfalseに共有セットするか必要があります(symfony> = 2.8)。

など。 (< 2.8)

services: 
    app.some_not_shared_service: 
     class: ... 
     scope: prototype 

例えば、詳細については、(> = 2.8)

services: 
    app.some_not_shared_service: 
     class: ... 
     shared: false 

http://symfony.com/doc/2.8/cookbook/service_container/shared.html

+0

それが動作する、ありがとう – trentlor

関連する問題