Получить текущий клиент на контроллере с помощью FOSOAuthServerBundle

Есть ли простой способ получить текущий клиент на контроллере с помощью FOSOAuthServerBundle на Symfony?

У меня есть некоторые свойства моего клиентского объекта, и я хочу прочитать их в контроллере, но я не могу найти способ получить текущий клиент.

Я нашел способ получить только текущего пользователя ($this->container->get('security.context')->getToken()->getUser();), но не текущего клиента.

РЕДАКТИРОВАТЬ: теперь я нашел способ получить клиента, но он не показывает мне значения свойств, которые я добавил в свой клиентский объект. Следующий код:

$token = $this->container->get('security.context')->getToken()->getToken();
$accessToken = $this->container->get('fos_oauth_server.access_token_manager.default')->findTokenBy(array('token' => $token));
$client = $accessToken->getClient();
\Doctrine\Common\Util\Debug::dump($client);

сбрасывает:

object(stdClass)[1180]
public '__CLASS__' => string 'CC\APIBundle\Entity\Client' (length=26)
public '__IS_PROXY__' => boolean true
public '__PROXY_INITIALIZED__' => boolean false
public 'id' => int 6
public 'name' => null
public 'city' => null
public 'randomId' => null
public 'secret' => null
public 'redirectUris' => 
  array (size=0)
    empty
public 'allowedGrantTypes' => null

Таким образом, имя и город, которые есть у моего клиента в БД, не отображаются... также я думаю, что есть много вызовов БД, которых можно было бы избежать очень элегантным способом...

Любые идеи?


person Noquepoaqui    schedule 07.02.2014    source источник
comment
К вашему сведению: в контроллере вы можете упростить текущего пользователя с помощью $this->getUser();   -  person NHG    schedule 07.02.2014
comment
Что ж, ваш контроллер должен расширять Symfony\Bundle\FrameworkBundle\Controller\Controller, иначе вам придется вместо этого добавить этот ярлык.   -  person coma    schedule 07.02.2014


Ответы (1)


$tokenManager = $container->get('fos_oauth_server.access_token_manager.default');
$accessToken = $tokenManager->findTokenByToken(
    $container->get('security.context')->getToken()->getToken()
);
$client = $accessToken->getClient();

Есть ваш клиент, и вы не можете видеть там свойства, потому что это всего лишь прокси. Как только вы запрашиваете недвижимость, например:

$client->getName();

вы увидите, что свойства будут инициализированы.

Имейте в виду, что $container - это ваш сервисный контейнер, если вы находитесь внутри контроллера, используйте $this->container, чтобы получить текущий.

person ggioffreda    schedule 12.05.2014