2014-07-14 50 views
0

我想FacebookSession類的對象傳遞給通過generateUrl我的控制器,但它給了我下面的錯誤是否可以在Symfony控制器中傳遞類變量作爲參數?

警告:的preg_match()預計參數2爲字符串,對象/用戶/ shashankm /文件中給出/Projects/myproject/app/cache/dev/classes.php線888

if($session) { 
      try { 

       //Redirect to a link here with the session variable using generateUrl 
       $url = $this->generateUrl('threadgab_userinfo_redirect', array('session' => $session), true); 

       return $this->redirect($url);   

      } catch(FacebookRequestException $e) { 

       //Create an error page for this scenario  
      } 
     } 

被叫控制器如下:

我做了如下代碼更改爲每邁克爾斯answerbut它不幫助:

/** 
* @Route("/userinfo/{session}") 
* @ParamConverter("session", class="Facebook:FacebookSession") 
*/ 
class UserinfoController extends Controller 
{ 
    public function indexAction(FacebookSession $session) 
    { 
     return new Response("Got session id : ". $session->getToken()); 
    } 
} 

在Symfony中可以這樣做嗎?

+1

對我來說,實現你的目標的最簡單的方法是查看依賴注入容器,爲facebook會話創建一個類,將它定義爲服務,在你的控制器中使用它 –

+0

你想要什麼實現?你真的需要使用session-id處理請求,或者你只需​​要將會話對象傳遞給某個控制器? –

回答

0

爲了傳遞一個對象到你的Controller中,你應該把它傳遞給Controller的構造函數。這是通過將Controller聲明爲服務,並將對象「注入」它來完成的。這就是所謂的依賴注入;您正在注入Controller將依賴的對象。

爲此,我們首先需要重構Controller中的構造函數,以便它現在將對象作爲參數。在這個例子中,我注入我自己的類,噓,進入我的控制器,富

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Acme\DemoBundle\Classes\Bar; 

class Foo extends Controller 
{ 
    private $bar; 

    public function __construct(Bar $bar){ 
     $this->bar = $bar 
    } 
} 

現在我們需要聲明此控制器作爲服務:

// Acme/DemoBundle/Resources/config/services.yml 
parameters: 
    acme.controller.foo.class: Acme\DemoBundle\Controller\FooController 
    acme.classes.bar.class: Acme\DemoBundle\Classes\Bar 

services: 
    acme.foo.controller: 
     class: "%acme.controller.foo.class%" 
     arguments: ['%acme.classes.bar.class%'] 

在這裏,我們是在說一個Foo類是通過將Bar實例傳遞給它來構造的。 FooBar的名稱空間在parameters部分中被識別。

最後,我們需要將services.yml導入項目:

// app/config/config.yml 
imports: 
    - { resource: "@AcmeDemoBundle/Resources/config/services.yml 

現在每次你打你的控制器內的動作的時候,你的構造函數會被調用,你的酒吧對象應該被實例化。

相關問題