我有一个实体,我想根据数据库查询验证其中一个属性。我在我的存储库中将其定义为一种方法,例如:
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();
}
}
}