2017-07-24 68 views
1

嗨,我有2個(或以上)控制器我的主控制器是:symfony的訪問對象

class DefaultController extends Controller 
{ 
    /** 
    * @Route("/{token}") 
    */ 
    public function indexAction($token) 
    { 
     $bot = $this->container->get('telegram_bot_api'); 
     $bot->changeBot($token, 'bot'); 

     return new Response("hello word"); 
    } 
} 

我想訪問另一個控制器的機器人對象,但我不希望使用forward()因爲我必須創建像T1Action($bot)T2Action($bot)

我該怎麼辦?

回答

0

只要您有訪問應用程序服務容器,你可以獲取從容器中服務:

class DifferentController extends Controller 
{ 
    public function differentAction() 
    { 
     $bot = $this->container->get('telegram_bot_api'); 

     // ... 
    } 
} 

或者 - 在我看來,這將是更好的選擇 - 你可以線了你控制器作爲服務,並通過構造函數將bot作爲依賴注入。

僅供參考,請參閱:

+0

但這種方法必須運行絲毫路徑'/ {令牌}'這是電報僵屍網絡掛接 –

+0

我離開了路線註解,因爲我知道沒有關於你的應用,也沒有你的路由。如果您共享其他控制器,或者至少您想要使用相同服務的操作,這可能會有所幫助。無論如何,重點是您可以從任何有權訪問容器的應用程序服務容器中獲取bot。這很強大,但在測試時需要大量的嘲弄。因此,通過構造函數注入依賴關係是更好的選擇(儘管如此)。 – localheinz

+0

我使我的主控制器是這樣的: '$ bot = $ this-> container-> get('telegram_bot_api'); $ bot-> changeBot('310491898:AAGo2EBRaf083tH0gD8beESDhWW-1rEpMS4','bot'); \t new TestController($ bot); \t回新的響應( 「你好字」);' 和我的我的TestController有這樣的代碼: '類擴展的TestController DefaultController { \t私人$ BOT; \t public function __construct($ bot){ \t \t $ this-> bot = $ bot; \t} \t公共功能的indexAction() { \t的var_dump($這 - > bot-> getMe()); return; } }' 是真的嗎? –