Forms 如果提交时带有clearMissing false,则不对Symfony表单执行验证

Forms 如果提交时带有clearMissing false,则不对Symfony表单执行验证,forms,rest,symfony,fosrestbundle,Forms,Rest,Symfony,Fosrestbundle,我正在用Symfony构建一个restapi。假设我得到了以下理论实体: class Car { private $model; private $make = 'Mercedes'; /** @Assert\NotBlank() **/ private $year; } 当我尝试使用HTTP POST请求(REST,无浏览器)创建新的Car时,如果请求不包含$make属性的任何值,默认情况下Form::submit()方法会使实体中的此字段为空。由于我不希望它

我正在用Symfony构建一个restapi。假设我得到了以下理论实体:

class Car {
    private $model;
    private $make = 'Mercedes';
    /** @Assert\NotBlank() **/
    private $year;
}
当我尝试使用HTTP POST请求(REST,无浏览器)创建新的
Car
时,如果请求不包含
$make
属性的任何值,默认情况下
Form::submit()
方法会使实体中的此字段为空。由于我不希望它这样做,我将其
clearMissing
参数设置为false。这可以正常工作,但现在我的
@Assert
约束未被考虑(与
clearmission
true
时相反)。例如,
$year
属性不会触发任何错误,如果
null
,则看起来没有执行任何验证

因此,我想知道是否有办法:

  • 在我的实体上具有默认值的属性
  • 加上缺少数据的字段无效
  • 加上@Asserts约束
注: 我找到一个两岁的孩子,他准确地描述了我的问题,但问题应该得到解决。所以它不应该和我的一样…

根据:

  • 如果要使用默认值,可以使用下一步:
  • 1) 对于YAML:

    field:
        options:
            default: "your_value_here"
    
    2) 对于注释,只需添加到@ORM\Column下一步:

    options={default:"you_value_here"}
    
  • 要设置为nullable,只需添加nullable:true选项:
  • 1) 亚马尔

    2) 注释

    @ORM\Column(...., nullable=true)
    

    这只会影响数据库级别。我希望我的对象具有此默认值(不必重复php属性中的默认值,因为DRY)。@marcv您是否尝试在_construct()中初始化您的对象?是的,与
    private$myProperty='value'
    相比,这没有什么区别。如果
    clearMissing
    arg为true,则
    submit()
    会使其无效。@marcv我已经测试了属性的定义,它对我有效。因此,我在实体类中将
    private$myProperty
    设置为
    value
    ,然后使用
    $form->handleRequest()结果我在表单中获得预定义值并成功保存。提交时使用什么?我不能使用HandlerRequest(AFAIK),因为我处于REST上下文中。请求不是来自浏览器。例如,请求中没有我表单的名称,这是
    handleRequest()
    所期望的。我使用
    $form->submit($request,true/false)
    @ORM\Column(...., nullable=true)