** обновление **
Я каким-то образом нашел способ установить опцию обратного вызова выбора валидатора:
Часть моего FormType.php:
\\ ABCFormType.php
$builder
->add('categories', 'entity', array(
'class' => 'ABCCommonBundle:Category',
'query_builder' => function(\path\to\my\custom\repository\CategoryRepository $repo) {
return $repo->findBaseLevel();
},
'expanded' => true,
'multiple' => true, ));
Часть моего пользовательского репозитория:
\\ CategoryRepository.php
class CategoryRepository extends NestedTreeRepository
{
private static $baseLevel = null;
public function findCategoriesOfLevel($level = 0)
{
return $this->createQueryBuilder('p')
->where('p.lvl = :level')
->setParameter('level', $level)
->orderBy('p.id', 'ASC');
}
public function __construct(EntityManager $em, ClassMetadata $class)
{
parent::__construct($em, $class);
if (null == self::$baseLevel) {
self::$baseLevel = $this->findBaseLevel()->getQuery()->getResult();
}
}
public function findBaseLevel()
{
return $this->findCategoriesOfLevel(0);
}
public static function getBaseLevel()
{
return self::$baseLevel;
}
Теперь у меня есть статический метод, поэтому я настроил его в опции обратного вызова выбора валидатора:
/**
* @ORM\ManyToMany(targetEntity="path\to\Entity\Category")
* @Assert\Choice(callback="\path\to\CategoryRepository::getBaseLevel", min="1")
*
* @var Category
*/
protected $categories;
Теперь этобыло подтверждено, что правильный «английский» массив был извлечен из базы данных, но поскольку я перевел английские имена категорий на китайский с помощью службы перевода Symfony, поэтому, хотя я и выбирал некоторые варианты, проверка всегда была неудачной !!!Пожалуйста, помогите.