Symfony2-使用条令库的选择约束



我有一个实体,我想根据数据库查询验证其中一个属性。我在我的存储库中将其定义为一种方法,例如:

class EntryRepository extends EntityRepository {
    /**
     * Gets valid entries for validation
     */
    public function getValidEntries() {
        return $this->createQueryBuilder('s')
            ->where('s.isAvailable = :isAvailable')
            ->setParameter('isAvailable', true)
            ->getQuery()
            ->getResult();
    }
    ...
}

如何使用此选项为选择约束提供可用的选择?我可以在我的实体类中这样定义它:

use SymfonyComponentValidatorConstraints as Assert;
class SomeEntity {
    /**
     * @AssertChoice(callback = {"AcmeMyBundleEntityEntryRepository", "getValidEntries"})
     * ...
     */
    private $entry;
    ...
    }

但是,这需要我在存储库中使该方法保持静态,这不是定义存储库方法的好方法。

有没有办法做得好?或者,也许我正在努力重新发明轮子,有更好的方法来做我在这里想做的事情?

正如Cerad所建议的,我曾考虑创建一个自定义验证约束,但我想出了一个更简单的方法——回调约束。

use SymfonyComponentValidatorConstraints as Assert;
use SymfonyComponentValidatorContextExecutionContextInterface;
use AcmeMyBundleEntityEntry;
class SomeEntity {
    /**
     * @var Entry
     */
    private $entry;
    ...
    /**
     * @AssertCallback
     */
    public function validate(ExecutionContextInterface $context) {
        if (!$this->entry->isAvailable()) {
            $context
            ->buildViolation('Entry is not available')
            ->addViolation();
        }
    }
}

最新更新