Symfony Doctrine 验证不适用于可嵌入的注释

Posted

技术标签:

【中文标题】Symfony Doctrine 验证不适用于可嵌入的注释【英文标题】:Symfony Doctrine validation not working with Annotations on Embeddables 【发布时间】:2021-01-27 12:02:33 【问题描述】:

我只是想确保我的 @Assert\NotBlank 在 Embeddable 中的一个字段上可以在 phpunit-test 中工作(使用 Doctrine 2.7 和 Symfony 5.1),但似乎没有检查制成。 为了确保它与 test-env 无关,我使用注入的验证器测试了相同的东西 在具有相同结果的测试服务器上的路由上。嵌入实体上的断言冲突正常工作。

有什么建议为什么会出现这种情况?

所以基本上:

/**
 * @package App\Entity\Embeddables
 * @ORM\Embeddable
 */
class MyEmbeddable

    /**
     * @var string
     * @ORM\Column(type="string", nullable=false)
     * @Assert\NotBlank
     */
    private string $text;

/**
 * @ORM\Entity(repositoryClass=MyThingRepository::class)
 */
class MyThing

    //..ID-stuff
    /**
     * @var MyEmbeddable
     * @ORM\Embedded(class="App\Entity\Embeddables\MyEmbeddable")
     */
    private MyEmbeddable $embeddableTestVar;

会导致:

$myThing = new MyThing();
$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
dd($validator->validate($myThing));

打印一个空数组。

任何帮助将不胜感激!

【问题讨论】:

为什么是-1?我很确定其他不熟悉该主题的人可以从中受益。 【参考方案1】:

尝试添加@Assert\Valid注解

/**
 * @ORM\Entity(repositoryClass=MyThingRepository::class)
 */
class MyThing

    //..ID-stuff
    /**
     * @Assert\Valid
     *
     * @var MyEmbeddable
     * @ORM\Embedded(class="App\Entity\Embeddables\MyEmbeddable")
     */
    private MyEmbeddable $embeddableTestVar;

【讨论】:

以上是关于Symfony Doctrine 验证不适用于可嵌入的注释的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony 应用程序/控制台中启用 Doctrine DBAL 命令

Symfony2 - 验证不适用于嵌入式表单类型

symfony doctrine验证实体关系错误

Symfony2 Doctrine ODM 嵌入类表单验证

如何将 ZendOpCache 用于 Doctrine2 缓存?

以编程方式对用户进行身份验证以进行 PhpUnit 功能测试 - 不受 Doctrine 管理 - Symfony 4.3