Невозможно расширить контроллер OAuthServerBundle

0

Я использую Symfony2 OAuth Bundle для аутентификации пользователей в моем веб-сервисе. Все работает правильно, но теперь я заинтересован в расширении полей JSon, где включен токен. Для этого я хочу создать свой собственный TokenController, который расширяет OAuth Bundle TokenController. Но каждый раз, когда я получаю эту ошибку:

Catchable Fatal Error: аргумент 1 передан в DAL\WebServiceBundle\Controller\TokenController :: __ construct() должен быть экземпляром OAuth2\OAuth2, не указанным, вызываемым в C:\xampp\htdocs\DALService\app\cache\dev\classes.php в строке 2396 и определен в C:\xampp\htdocs\DALService\src\DAL\WebServiceBundle\Controller\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
    Вы решили эту проблему?
Теги:
oauth

4 ответа

1

Чтобы расширить TokenController, вы можете преодолеть его с помощью компилятора.

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

У меня была именно эта проблема, я попытался все это и не имел никакой разницы, просто не дал бы мне ввести службу fos_oauth_server.server!

Но то, что вы можете сделать, это расширить класс контроллера по умолчанию вместо контроллера токена, а затем получить файл fos_oauth_server.server из контейнера службы. Это не идеальное решение imo, и я бы предпочел найти способ, который может расширить класс TokenController fosoauth, но он работает

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();
    }
  }
}
0

Прочтите следующее: как определить контроллеры как службы и добавить их в ваши 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
  • 0
    Я попытался с обоими частями кода, и я все еще получаю то же самое сообщение об ошибке.
  • 0
    Попробуйте добавить это в public function __construct(OAuth2 $server) { parent::__construct($server); } Your TokenController public function __construct(OAuth2 $server) { parent::__construct($server); }
Показать ещё 3 комментария
0

В your 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню