我正在使用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;
}
}
知道发生了什么事吗?
谢谢!
答案 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 ?
因为扩展控制器构造函数需要它才能工作!
<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
答案 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();
}
}
}