Ho un'entità, una delle quali mi piacerebbe convalidare in base a una query del database. Ce l'ho definito come un metodo nel mio repository, per esempio:Symfony2 - vincolo di scelta usando il repository Doctrine
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();
}
...
}
Come posso usare questo per fornire scelte disponibili per il vincolo di scelta? Potrei definirlo nella mia classe di entità simile a questo:
use Symfony\Component\Validator\Constraints as Assert;
class SomeEntity {
/**
* @Assert\Choice(callback = {"Acme\MyBundle\Entity\EntryRepository", "getValidEntries"})
* ...
*/
private $entry;
...
}
Tuttavia, questo mi richiederebbe di rendere questo metodo statico nel repository, che non è un buon modo per definire i metodi di repository.
C'è un modo per farlo correttamente? O forse sto cercando di reinventare la ruota e c'è un modo migliore per fare ciò che sto cercando di fare qui?
Penso che la soluzione migliore sarebbe creare il proprio vincolo e iniettare il repository come dipendenza. http://symfony.com/doc/current/cookbook/validation/custom_constraint.html#constraint-validators-with-dependencies – Cerad