2016-06-16 3 views
0

Я использую FOSRestBundle в Symfony2 для предоставления REST-сервиса.Symfony2 FOSRestBundle поля возвращаемого объекта, содержащиеся в форме

В настоящее время мой контроллер возвращает объект при запросе ресурса (например, /users/40). Интерфейс содержит форму, которая позволяет управлять этим ресурсом и отправляет его с помощью PUT. Контроллер использует форму для обработки данных.

Моя проблема заключается в том, что форма имеет меньше полей, чем весь объект (id и password_hash - хорошие примеры). Я пришел к выводу, что отправка всего объекта клиенту - плохая идея. Вместо этого я хочу, чтобы FOSRestBundle отправлял только поля сущностей, которые доступны в форме.

Так что я просто попытался:

return $this->createForm(UserType::class, $entity); 

Структура JSON вернулась с сервера FOSRestBundle выглядит очень хорошо. Но, к сожалению, он не содержит значений.

Конечно, нет - форма не связана. И на данный момент нет смысла связывать данные. Поэтому мне нужно найти другое решение.

Этот случай использования будет очень распространен в моих приложениях. Поэтому я задаюсь вопросом, не было ли простого/стандартного способа достичь этого.

(PS Я использую Угловое JS в веб-интерфейсе. Я просто прикрепить сущности ресурс JSON к объему и форме использования Symfony шаблонов для создания полей формы, которые автоматически привязанные к нужному объекту объема)

ответ

1

стандартным способом определения того, что должно быть возвращено из FOS, является использование групп сериализаторов и либо компонента сериализатора Symfony, либо сериализатора JMS.

В обоих случаях определяют группы на свойствах сущностей:

// in the entity 
use Symfony\Component\Serializer\Annotation\Groups; 

class Story 
{ 
    /** 
    * @Groups({"story"}) 
    * 
    * @var int 
    */ 
    private $id; 

И потом:

// in the controller 
* @Rest\View(serializerGroups={"story"}) 
* @Rest\Route("stories") 
* 
* @return Story[] 
*/ 
public function getStoriesAction() 

который вернет вам объект или объекты со свойствами, совпадающими с контроллером Serializer группы подвергаются.