Prz*_*mek 5 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();
}
...
}
Run Code Online (Sandbox Code Playgroud)
如何使用它为选择约束提供可用选项?我可以在我的实体类中定义它,如下所示:
use Symfony\Component\Validator\Constraints as Assert;
class SomeEntity {
/**
* @Assert\Choice(callback = {"Acme\MyBundle\Entity\EntryRepository", "getValidEntries"})
* ...
*/
private $entry;
...
}
Run Code Online (Sandbox Code Playgroud)
但是,这需要我在存储库中使此方法静态,这不是定义存储库方法的好方法.
有没有办法正确地做到这一点?或者也许我正在尝试重新发明轮子,有更好的方法来做我想在这里做的事情?
好吧,我考虑创建一个自定义验证约束,正如 Cerad 建议的那样,但我想出了一些更简单的东西 -回调约束。
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
829 次 |
| 最近记录: |