Проверка формы Symfony не выполняется, если она отправлена ​​с clearMissing false

Я создаю REST API с помощью Symfony. Допустим, у меня есть следующая сущность Doctrine:

class Car {
    private $model;
    private $make = 'Mercedes';
    /** @Assert\NotBlank() **/
    private $year;
}

Когда я пытаюсь создать новый Car с помощью HTTP-запроса POST (REST, без браузера), если запрос не содержит никакого значения для свойства $make, по умолчанию метод Form::submit() обнуляет это поле в моей сущности. Поскольку я не хочу, чтобы это происходило, я установил для его аргумента clearMissing значение false. Это отлично работает, за исключением того, что теперь мои @Assert ограничения не принимаются во внимание (в отличие от того, когда clearmissing равно true). Например, свойство $year не вызывает никаких ошибок, если null, похоже, проверка не выполняется.

Итак, я хотел бы знать, есть ли способ получить:

  • свойства со значениями по умолчанию в моей сущности
  • плюс отсутствие обнуления полей для отсутствующих данных
  • плюс соблюдены ограничения @Asserts

Примечание:

Я нашел проблему на Github двухлетней давности, которая точно описывает мою проблему, но проблема в том, предполагается исправить. Так что он не должен быть таким же, как у меня ...


person marcv    schedule 12.11.2015    source источник


Ответы (1)


Согласно http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html:

  1. Если вы хотите использовать значение по умолчанию, вы можете использовать следующее:

1) для YAML:

field:
    options:
        default: "your_value_here"

2) для аннотаций просто добавьте в @ORM \ Column следующее:

options={default:"you_value_here"}
  1. чтобы установить значение NULL, просто добавьте параметр NULL: true:

1) ЯМЛ

field:
    nullable: true

2) аннотации

@ORM\Column(...., nullable=true)
person Sergio Ivanuzzo    schedule 12.11.2015
comment
Это повлияет только на уровень базы данных. Я бы хотел, чтобы мои объекты имели это значение по умолчанию (без необходимости повторять значение по умолчанию в свойстве php, потому что DRY). - person marcv; 12.11.2015
comment
@marcv вы пытались инициализировать свой объект в __construct ()? - person Sergio Ivanuzzo; 12.11.2015
comment
Да, без разницы по сравнению с private $myProperty = 'value'. Он аннулируется submit(), если clearMissing arg истинно. - person marcv; 12.11.2015
comment
@marcv Я тестировал определение свойства, и он у меня работает. Итак, я установил private $myProperty в value в моем классе Entity, а затем использую $form->handleRequest(); В результате я получаю предопределенное значение в своей форме и успешно сохраняю его. Что вы используете для отправки? - person Sergio Ivanuzzo; 12.11.2015
comment
Я не могу использовать handleRequest (AFAIK), потому что я нахожусь в контексте REST. Запрос не из браузера. Например, имя моей формы отсутствует в запросе, чего ожидает handleRequest(). Я использую $form->submit($request, true/false) - person marcv; 12.11.2015
comment
@marcv см. также это - person Sergio Ivanuzzo; 12.11.2015