无法扩展OAuthServerBundle控制器

时间:2014-11-25 13:15:26

标签: php symfony oauth

我正在使用Symfony2的OAuth Bundle对我的webservice上的用户进行身份验证。一切正常,但现在我有兴趣扩展包含令牌的JSon的字段。为此,我想创建自己的TokenController,扩展OAuth Bundle的TokenController。但每次我收到这个错误:

  

捕获致命错误:参数1传递给   DAL \ WebServiceBundle \ Controller \ TokenController :: __ construct()必须是   OAuth2 \ OAuth2的一个实例,没有给出,调用   第2396行的C:\ xampp \ htdocs \ DALService \ app \ cache \ dev \ classes.php和   定义于   C:\ XAMPP \ htdocs中\ DALService \ SRC \ DAL \ WebServiceBundle \控制器\ TokenController.php   第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;
    }


}

知道发生了什么事吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

要扩展TokenController,您可以使用编译器传递覆盖它。

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

答案 1 :(得分:0)

阅读本文: How to Define Controllers as Services 并将其添加到services.xml / yml

为什么 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>

YML:

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

答案 2 :(得分: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

答案 3 :(得分:0)

我也遇到了这个问题,尝试了上述所有内容并没有区别,它只是不让我注入fos_oauth_server.server服务!

但是您可以做的是扩展默认控制器类而不是令牌控制器,然后从服务容器中获取fos_oauth_server.server。它不是一个理想的解决方案imo,我宁愿找到一种方法可以扩展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();
    }
  }
}