2014-11-25 139 views
0

我正在使用Symfony2的OAuth包對我的web服務上的用戶進行身份驗證。一切工作正常,但現在我有興趣擴展包含令牌的JSon的字段。爲此,我想創建自己的TokenController,它擴展了OAuth Bundle的TokenController。但每次我得到這個錯誤:無法擴展OAuthServerBundle控制器

Catchable Fatal Error: Argument 1 passed to DAL\WebServiceBundle\Controller\TokenController::__construct() must be an instance of OAuth2\OAuth2, none given, called in C:\xampp\htdocs\DALService\app\cache\dev\classes.php on line 2396 and defined in C:\xampp\htdocs\DALService\src\DAL\WebServiceBundle\Controller\TokenController.php line 22

這是我的TokenController代碼:

<?php 

namespace DAL\WebServiceBundle\Controller; 

use Symfony\Component\HttpFoundation\Request; 
use OAuth2\OAuth2; 
use OAuth2\OAuth2ServerException; 

use FOS\OAuthServerBundle\Controller\TokenController as BaseTokenController; 

class TokenController extends BaseTokenController 
{ 

    public function tokenAction (Request $request) 
    { 
     $response = parent::tokenAction($request); 

     return $response; 
    } 


} 

是怎麼回事的任何想法?

謝謝!

+0

你解決了這個問題嗎? – 2014-11-28 13:01:29

回答

0

閱讀: How to Define Controllers as Services 並添加到您的services.xml /陽明

爲什麼fos_oauth_server.server
由於擴展控制器構造函數需要它的工作!

XML:

<service id="dal.webservice.bundle.controller.token" class="DAL\WebServiceBundle\Controller\TokenController"> 
    <argument type="service" id="fos_oauth_server.server" /> 
</service> 

陽明:

dal.webservice.bundle.controller.token: 
     class: DAL\WebServiceBundle\Controller\TokenController 
     arguments: 
      server: @fos_oauth_server.server 
+0

我嘗試了兩段代碼,但仍然收到相同的錯誤消息。 – 2014-11-25 17:30:05

+0

嘗試將此添加到您的TokenController中 'public function __construct(OAuth2 $ server) { \t parent :: __ construct($ server); }' – 2014-11-25 18:20:28

+0

它都不起作用。我仍然得到同樣的錯誤。 – 2014-11-26 11:30:46

0

在你services.yml/XML你必須定義構造函數的參數。在例: your.service: class: DAL\WebServiceBundle\Controller\TokenController arguments: doctrine: @doctrine //example OFC tags: - { name: some tag... } 這裏是如何定義控制器作爲服務http://symfony.com/doc/current/cookbook/controller/service.html

0

我正是這個問題爲好,嘗試了所有的上面並沒有什麼區別,它只是不會讓我注入fos_oauth_server.server服務!

但是,您可以做的是擴展默認控制器類而不是令牌控制器,然後從服務容器中獲取fos_oauth_server.server。它不是一個理想的解決方案海事組織並且我也希望找到一種方法,可以延長fosoauth TokenController類,但它的工作

namespace Acme\ApiBundle\Controller 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 

class TokenController extends Controller{ 

    public function tokenAction(Request $request) 
    { 
    $server = $this->get('fos_oauth_server.server'); 
    try { 
     return $server->grantAccessToken($request); 
    } catch (OAuth2ServerException $e) { 
     return $e->getHttpResponse(); 
    } 
    } 
} 
1

要延長TokenController你可以用一個編譯過程overiding它。

public function process(ContainerBuilder $container) 
    { 
     $tokenControllerService = $container->getDefinition('fos_oauth_server.controller.token'); 
     $tokenControllerService->setClass('YourTokenController'); 
    }