我试图通过doctrine阻止空字符串插入MySQL数据库,
我做到了:

 /**
   * @ORM\Column(type="string", length=255)
   * @Assert\NotBlank() ( or NotNull() )
   */
    private $name;

我在插入空的输入post值时仍然没有错误,

最佳答案

您需要实现your own custom entity validationAssert注释由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)。

09-26 05:57