2012-03-02 113 views

回答

3

有很多種不同的方式,都有優點和缺點。

首先,每個服務都是某種對象,所以你總是可以自己創建有問題的對象。你可能被迫處理很多引用,但這是可能的。這破壞了依賴注入的想法,所以這不是你應該做的!

第二種方式是注入到服務類:

class MyClass{ 

    public function __construct($session){ 
     // ... 
    } 
} 

class MyContainer extends Controller{ 

    public function SomeKindOfAction(){ 
     $myClass = new MyClass($this->get('session')); 
    } 
} 

如果你只是你的控制器中使用的類,這可能是好的。如果你有更多的嵌套關係,比如在MyClass中,你需要創建另一個類,你可能會遇到緊耦合(這是爲了避免)以及複雜性問題。

最好的方法是創建自己的服務並在那裏注入所需的東西。這裏有很多文檔,所以我只是舉一個簡單的例子來使用上面的MyClass。

services.yml: 

services: 
    my.myClass: 
     class: /Acme/DefaultBundle/MyStuff/MyClass 
     arguments: ["@session"] 

現在你的類是作爲服務(誰也想不到,就是這麼簡單!),你可以使用它你的控制器內:

class MyContainer extends Controller{ 

    public function SomeKindOfAction(){ 
     $myClass = $this->get('my.myClass'); 
    } 
} 

現在你不必去想構造以及如何爲了獲得你的物品,DI容器會爲你做。如果你想知道更多,請閱讀here

+0

非常感謝 – falinsky 2012-03-02 13:59:24