我试图通过doctrine阻止空字符串插入MySQL数据库,
我做到了:
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank() ( or NotNull() )
*/
private $name;
我在插入空的输入post值时仍然没有错误,
最佳答案
您需要实现your own custom entity validation。Assert
注释由Validator
组件使用,但不是由条令使用。
例如,您可以这样做:
/**
* @Entity
* @HasLifecycleCallbacks
*/
class Thing
{
/**
* @ORM\Column(type="string", length=255, nullable=false)
*/
private $name;
/**
* @PrePersist @PreUpdate
*/
public function assertNotEmptyName() {
if(empty($this->name)) {
throw new ThingWithNoNameException();
}
}
}
在创建或更新
Thing
之前,将调用实体assertNotEmptyName()
,如果name
为空,则将引发异常。此外,我还添加了
nullable=false
,因此在DB级别很明显,名称不能null
,以获得更高的数据完整性。(逻辑上,您还必须定义
ThingWithNoNameException
)。