学说 ODM 独特的约束条件不能验证属性。

问题描述 投票:1回答:1

我不明白为什么Doctrine的ODM Unique约束对我不起作用。

下面是一个带有 "标题 "属性的页面类,它需要在所有页面中是唯一的。

namespace App\Document;

use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique as MongoDBUnique;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use App\Repository\PageRepository;
use App\Document\Embeded\Section;

/**
 * @ODM\Document(repositoryClass=PageRepository::class)
 * @MongoDBUnique(fields="title")
 */
class Page
{
    /** @ODM\Id() */
    private $id;

    /** @ODM\ReferenceOne(targetDocument=Site::class) */
    private $site;

    /** @ODM\Field(type="string")
     * @ODM\UniqueIndex(order="asc")
     */
    private $title;

    // ...

在控制器中。$form->handleRequest($request) 被调用,后面是查询:如果($form->isSubmitted() && $form->isValid())

表格总是以有效的方式返回。ODM Unique约束似乎被忽略了。我也尝试添加一个自定义的验证约束,但遇到了同样的问题。

我是否需要添加任何额外的配置来使其工作?

php symfony doctrine-odm
1个回答
1
投票

Symfony表单在设计上只验证顶层对象。在本例中,页面类被附加到一个嵌入式表单中。

解决方法:在顶层对象中添加Symfony的@Valid()约束。

/** @ODM\ReferenceOne(targetDocument="App\Document\Page", cascade={"persist"}, orphanRemoval=true)
 * @ODM\Index 
 * @Assert\Valid()
 */
private $page;
© www.soinside.com 2019 - 2024. All rights reserved.