Php 如何在下拉列表中默认设置数据
在一个项目symfony3.4中,我有两个实体:个人和国有 在我的表格下拉列表中,我希望默认选择国有化“法语” personeType.php:Php 如何在下拉列表中默认设置数据,php,symfony,doctrine,Php,Symfony,Doctrine,在一个项目symfony3.4中,我有两个实体:个人和国有 在我的表格下拉列表中,我希望默认选择国有化“法语” personeType.php: ... public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('nationalite', EntityType::class, array( 'class' =>
...
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('nationalite', EntityType::class, array(
'class' => 'AppBundle:Nationalite',
'choice_label' => 'libelle',
'required' => false,
'empty_data' => function(NationaliteRepository $repo) {
return $repo->getNationaliteParDefaut();
}
))
->add...
在NationalTerepository.php中:
...
public function getNationaliteParDefaut(){
$qb = $this->createQueryBuilder('n');
$qb->where($qb->expr()->eq('n.codeInsee', ':code_insee'))
->setParameter('code_insee', 99100); //99100 is France code_insee
return $qb->getQuery()->getOneOrNullResult();
}
...
此方法会生成以下错误:
可捕获致命错误:参数1传递给
AppBundle\Form\PersonType::AppBundle\Form{Close}必须是
AppBundle\Repository\NationalTerepository的实例,的实例
Symfony\Component\Form\Form给定,在第620行的/var/www/…vendor/Symfony/Symfony/src/Symfony/Component/Form/Form.php中调用并定义
尝试首选选项。首选_选项显示在列表顶部,但不会被选择。如果要选择某个项目,请使用具有所需默认国籍的POPO纯对象PHP对象构建表单。实体/对象的最佳方法是在实体本身或创建表单之前,或使用某些生成器/工厂,在对象类本身上设置默认选项 //让我们假设这是一个充满民族主义的班级 班主任{ 私人$name //…其他一些领域。。。 私有资产国有化 公共功能设置NationalTenanalite$nationale { $this->nationate=$nationate } } 表单创建对象方法 $person=新人;
$person->setNationalite$repo->getNationalitepardefut; //让我们说人形是你的形式,那也有场国有化 $form=$this->createFormPersonType:class$person; 使用此设置,表单将预填充来自对象(包括Nationate)的默认数据,用户仍然可以轻松地更改它 非对象方法 另一种方法是使用表单事件
// in your form definition
$builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$form->add('nationalite', EntityType::class, array(
'class' => 'AppBundle:Nationalite',
'choice_label' => 'libelle',
'required' => false,
'data' => $repo->getNationaliteParDefaut()
)
}
关于空数据
空数据仅在表单字段为空时有效,例如,用户没有选择任何内容,因此将使用空数据中的值
参考:$person->setNationalite$repo->getNationalitepardefut;//在哪里/如何恢复$repo变量?我通过这样做解决了这个问题:公共函数buildFormBuilderInterface$builder,数组$options{$personne=$options['data'];$em=$options['entityManager']$DefaultNationate=$em->getRepository'AppBundle:Nationate'->GetNationatePartefut;如果为空$personne->GetNationate{$personne->SetNationate$defaultNationalite;}----请参见:$person->setNationalite$repo->GetNationalitepardefut。通常,您在controller中调用createForm,这样您就可以在那里注入存储库或实体管理器的依赖项并调用该方法。这在某种程度上是相关的:。在该示例的基础上,如果您想要一个选择项,使用POPO/构建表单,我不知道如何执行{o_o}