Symfony - Как десериализовать со значениями по умолчанию? - PullRequest
0 голосов
/ 21 марта 2019

Я начинаю изучать Symfony 4.

Я хочу десериализовать данные из данных JSON. (Я использую JMSSerializer)

Это мой контекст: У меня есть сущность Customer в src / App / Entity

class Customer {
    /**
     * 
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @ORM\Column(type="string", length=250)
     * @Assert\NotBlank()     
     */
    private $name;
     /**
     * @ORM\Column(type="string", length=250)
     * @Assert\NotNull
     */
    private $comment;

    public function __construct() {
    $this->comment = "";
    }
}

У меня есть контроллер CustomerController в src / App / Controller

class CustomerController extends Controller
{
    /**
     * @Route("/customers", name="customer_create")
     * @Method({"POST"})
     */
    public function createAction(Request $request)
    {
        $data = $request->getContent();
        //Il faudrait valider les données avant de les mettre en base de données
        $customer = $this->get('jms_serializer')->deserialize($data, 'App\Entity\Customer', 'json');        

        $em = $this->getDoctrine()->getManager();
        $em->persist($customer);
        $em->flush();

        return new Response('', Response::HTTP_CREATED);
    }
}

Я отправляю запрос на создание клиента со следующими данными JSON:

{"name":"Customer Lambda"}

но у меня следующая ошибка

NotNullConstraintViolationException

Возникла исключительная ситуация при выполнении 'INSERT INTO клиентов (идентификатор, имя, комментарий) VALUES (?,?,?,?)' С параметрами [идентификатор ресурса № 99, "Лямбда клиентов", ноль]:

SQLSTATE [23000]: нарушение ограничения целостности: 1048 столбец «комментарий» не может быть нулевым

Можно ли установить значение по умолчанию (пустую строку) для поля комментария после десериализации? Я думал, что установка его в конструкторе Customer решит проблему, но это не так.

1 Ответ

1 голос
/ 21 марта 2019

1º Почему вы пытаетесь установить пустую строку, если вы определили комментарий как необнуляемый.

Это:

 /**
 * @ORM\Column(type="string", length=250)
 * @Assert\NotNull
 */
private $comment = "";

public function __construct() {
}

Вместо этого:

 /**
 * @ORM\Column(type="string", length=250)
 * @Assert\NotNull
 */
private $comment;

public function __construct() {
$this->comment = "";
}
...