class User
{
public $id;
public $username;
public function getCompanies()
{
//stuff
}
}
class Company
{
public $id;
public $name;
public static function getForUser(User $user)
{
//stuff
}
}
我有上述两个模型,并希望创建一个可重复使用的自定义ChoiceType
字段,该字段将是基于User对象的筛选Company
ID(或对象)的选择框。如果未提供User
,则拥有所有公司对象的ChoiceType
(选择框)。
我该如何解决这个问题?我一直在阅读Symfony文档,并且似乎找不到任何类似于我需要的例子。
我可以使用公司类中的getForUser()
或来自User类的getCompanies()
(他们几乎都做同样的事情)。
公司与用户之间没有直接关系。它们通过其他对象/表格(经理/客户/联系人)“加入”。
class CompanyType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('company', ChoiceType::class, array(
"choices" => ??????
));
}
public function getParent()
{
return ChoiceType::class;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Company::class,
));
}
}
所有帮助将不胜感激。
答案 0 :(得分:1)
我建议你试试这个链接:
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
// ...
$builder->add('users', EntityType::class, array(
'class' => 'AppBundle:Company',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.name', 'ASC'); //or DESC
},
'choice_label' => 'username',
));