2015-10-09 3 views
1

Я использую FOSRestBundle - с автоматическими рогами и автоматическими видами. Мои действия в контроллере выглядит следующим образом:symfony FOSRestBundle depth

public function getAction($user_id) 
{ 
    $user = $this->em->getRepository('SBGUserBundle:User')->find($user_id); 
    return $user; 
} 

Все в порядке, мой ответ в формате JSON выглядит следующим образом:

{ 
    "id": 20, 
    "username": "fwojciechowski", 
    "mpks": [{ 
     "id": 91, 
     "name": "Testowe MPK 1", 
     "managers": [] 
    }, { 
     "id": 92, 
     "name": "Testowe MPK 2", 
     "teta_id": 1, 
     "managers": [] 
    }] 
} 

Но я должен принять глубину 1 уровень больше - мне нужно «менеджеры» в массиве «mpks». Но мне не нужны 3 уровня в других случаях. Как я могу это сделать?

ответ

1

аннотаций

, если вы используете аннотации вы можете сделать это следующим образом YML конфиги позже для справки. первых вы идете к менеджеру объекта и добавить следующее:

/** 
* Manager 
* 
* @ORM\Table(name="manager") 
* @ORM\Entity 
* 
* @Serializer\ExclusionPolicy("all") 
*/ 
class Manager 
{ 
...... 
     /** 
* @var int 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
* 
* @Serializer\Expose 
* @Serializer\Groups({ 
*  "user", 
* }) 
*/ 
private $id; 

теперь вы решаете, какие свойства вам нужно от менеджеров и добавить следующее перед каждым объектом

* @Serializer\Expose 
* @Serializer\Groups({ 
*  "user", 
* }) 
$property 

тогда перед вашим getAction вы добавляете это

/** 
* Get User. 
* 
* @param User $user 
* 
* @return User 
* 
* @Route\Get("/users", options={"expose"=true}) 
* 
* @View(serializerGroups={"user"}) \\notice that its the same group name from before Serializer\Groups({"user"}) 
* 
* @ApiDoc(
* .... 
*) 
*/ 
public function getAction() 

YML

это шо uld выглядят примерно так

Acme\User: 
    exclusion_policy: ALL 
    properties: 
     id: 
      expose: true 
     username: 
      expose: true 
     mpks: 
      expose: true 
Acme\Manager 
    exclusion_policy: ALL 
    properties: 
     id: 
      expose: true 
     first_name: 
      expose: true 
     last_name: 
      expose: true 
     #and the rest of your wanted properties 
Смежные вопросы