php - Symfony2 - 使用 Doctrine 存储库的选择约束

标签 php validation symfony doctrine-orm

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

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 Symfony\Component\Validator\Constraints as Assert;

class SomeEntity {

    /**
     * @Assert\Choice(callback = {"Acme\MyBundle\Entity\EntryRepository", "getValidEntries"})
     * ...
     */
    private $entry;

    ...

    }

但是,这需要我在存储库中将此方法设为静态,这不是定义存储库方法的好方法。

有没有办法正确地做到这一点?或者也许我正在尝试重新发明轮子,并且有更好的方法来完成我在这里尝试做的事情?

最佳答案

好吧,我打算按照 Cerad 的建议创建自定义验证约束,但我想出了一些更简单的方法 - Callback constraint .

use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Acme\MyBundle\Entity\Entry;

class SomeEntity {

    /**
     * @var Entry
     */
    private $entry;

    ...

    /**
     * @Assert\Callback
     */
    public function validate(ExecutionContextInterface $context) {
        if (!$this->entry->isAvailable()) {
            $context
            ->buildViolation('Entry is not available')
            ->addViolation();
        }
    }

}

关于php - Symfony2 - 使用 Doctrine 存储库的选择约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676032/

相关文章:

php - Symfony 2 注销

php - 根据具有重复值的列以 +1 增量更新列

jquery - 在多选元素上使用 jquery 验证远程

mysql - 使用 laravel 在 MongoDB 中的唯一值验证中找不到基表

model-view-controller - AngularJS 的验证策略

mysql - Symfony2/ Doctrine 关系映射

mongodb - Docker中的Symfony应用程序不起作用

php - 如何在php中更新mysql表而不刷新页面?

javascript - 通过php加载HTML表单然后使用JQuery提交表单

php - 订单履行优化算法