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 命令
如何将 ZendOpCache 用于 Doctrine2 缓存?
以编程方式对用户进行身份验证以进行 PhpUnit 功能测试 - 不受 Doctrine 管理 - Symfony 4.3