сериализация с jms в symfony - PullRequest
0 голосов
/ 27 июня 2018

У меня есть объект User, содержащий адрес. Я сохраню адрес как JSON в моей базе данных. После проверки формы я должен вручную сериализовать адрес перед сохранением данных. Есть ли способ избежать этого? Можно ли вызвать сериализованное событие, когда доктрина сохраняет данные?

class User{
    /**
    * @ORM\Column(name="username", type="string", length=30)
    **/
    private $username;

    /**
    * @ORM\Column(name="address", type="json")
    **/
    private $address;
}

class Address{
   private $postalcode;
   private $street;
}

// Внутри моего контроллера

class UserController extends Controller{

    /**
     * @Rest\View(StatusCode = Response::HTTP_CREATED)
     *
     * @Rest\Post(
     *   path = "/user",
     *   name = "user_create"
     * )
     */
      public function createAction(){
         $user = new User();
         $form = $this->createForm(UserType::class, $user);
         $form->submit($request->request->all());

         if ($form->isValid())
         {
            $em = $this->getDoctrine()->getManager();
            $user->setAddress($this->get('jms_serializer')->serialize($user->getAddress(), 'json'));

            $em->persist($user);
            $em->flush();

            return $this->view($user, Response::HTTP_CREATED);
         }

         return $form;
      }
}

1 Ответ

0 голосов
/ 27 июня 2018

Doctrine не удалось сделать его json, потому что свойство address было приватным ( PHP json_encode, возвращающий пустую структуру ). Публичное решение проблемы. При определении типа как json, doctrine будет использовать функции кодирования json в php: https://www.doctrine -project.org / projects / doctrine-dbal / en / latest / reference / types.html # json-array Спасибо

...