Doctrine ODM Уникальное ограничение, не проверяющее свойство - PullRequest
1 голос
/ 04 мая 2020

Я не могу понять, почему ограничение Doctrine ODM Unique не работает для меня.

Ниже приведен класс страниц со свойством title, который должен быть уникальным среди всех. Страницы.

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), после чего следует запрос: if ($form->isSubmitted() && $form->isValid())

Форма всегда возвращается как действительная. Ограничение ODM Unique, похоже, игнорируется. Я также пытался добавить пользовательское ограничение проверки и встретился с той же проблемой.

Нужно ли добавлять какие-либо дополнительные настройки, чтобы это работало?

1 Ответ

1 голос
/ 04 мая 2020

Symfony формы только проверяют объект верхнего уровня по проекту. В этом случае класс страницы был присоединен к внедренной форме.

Решение: добавьте ограничение @Valid () Symfony к свойству в объекте верхнего уровня.

/** @ODM\ReferenceOne(targetDocument="App\Document\Page", cascade={"persist"}, orphanRemoval=true)
 * @ODM\Index 
 * @Assert\Valid()
 */
private $page;
...