Forms 如果提交时带有clearMissing false,则不对Symfony表单执行验证
我正在用Symfony构建一个restapi。假设我得到了以下理论实体: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()方法会使实体中的此字段为空。由于我不希望它
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约束
field:
options:
default: "your_value_here"
2) 对于注释,只需添加到@ORM\Column下一步:
options={default:"you_value_here"}
@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)