Php Symfony提交多个相关表格
我希望创建一个包含多个Entite和多个表单的CRUD。一个想要创建一个站点,每个站点在创建时需要有一个地址,每个地址需要一个城市,每个城市需要一个国家 所以我有一个控制器,在那里我调用了我的Php Symfony提交多个相关表格,php,forms,symfony,symfony4,Php,Forms,Symfony,Symfony4,我希望创建一个包含多个Entite和多个表单的CRUD。一个想要创建一个站点,每个站点在创建时需要有一个地址,每个地址需要一个城市,每个城市需要一个国家 所以我有一个控制器,在那里我调用了我的类型 /** *@Route(“admin/sites/new”,name=“admin.sites.new”) *@param Request$Request *@return-Response | Response */ 新公共功能(请求$Request) { $site=新站点(); $ADRESE
类型
/**
*@Route(“admin/sites/new”,name=“admin.sites.new”)
*@param Request$Request
*@return-Response | Response
*/
新公共功能(请求$Request)
{
$site=新站点();
$ADRESE=新ADRESE();
$VILE=新VILE();
$pays=新支付();
$form=$this->createForm(SiteType::class,$site);
$form2=$this->createForm(adrestype::class,$adresse);
$form3=$this->createForm(VilleType::class,$ville);
$form4=$this->createForm(PaysType::class,$pays);
$form->handleRequest($request);
$form2->handleRequest($request);
$form3->handleRequest($request);
$form4->handleRequest($request);
如果($form->isSubmitted()&&&$form->isValid()
&&$form2->isSubmitted()&&&$form2->isValid()
&&$form3->isSubmitted()&&&$form3->isValid()
&&$form4->isSubmitted()&&&$form4->isValid()){
$this->em->persist($site);
$this->em->persist($adrese);
$this->em->persist($ville);
$this->em->persist($pays);
$this->em->flush();
$this->addFlash('success','Site crée avec success');
返回$this->redirectToRoute('admin.sites.index');
}
返回$this->render('admin/sites/create.html.twig'[
“站点”=>$site,
“ADRESE”=>$ADRESE,
“ville”=>$ville,
“支付”=>美元支付,
'form'=>$form->createView(),
'form2'=>$form2->createView(),
'form3'=>$form3->createView(),
'form4'=>$form4->createView(),
]);
}
和生成视图的细枝
{{form_start(form)}}
{{form_widget(form)}
{{form_start(form2)}}
{{form_widget(form2)}}
{{form_start(form3)}
{{form_widget(form3)}
{{form_start(form4)}}
{{form_widget(form4)}
{{按钮|默认('Enregister')}
{{form_end(form)}{{form_end(form2)}}{{form_end(form3)}}{{form_end(form4)}
我的问题是下一个问题,我将如何创建我的站点,我可以链接站点id和地址id,地址id和城市id,城市id和国家id?没有分开的表格?
我的意思是,当我按下按钮时,关系将正确创建
谢谢您的帮助。您应该使用嵌入表单:。您应该使用嵌入表单:。这是您应该并且可以实现的方法: 您应该使用嵌入表单 您只需为实体创建表单类型:SiteType、adresetype、VilleType、PaysType,并按如下方式嵌入它们
// in SiteType
//....
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
//...
->add('adresse', AdresseType::class)
;
}
最后,在控制器中,您所要做的就是创建
/**
* @Route("admin/sites/new", name="admin.sites.new")
* @param Request $request
* @return RedirectResponse|Response
*/
public function new (Request $request)
{
$site = new Site();
$form = $this->createForm(SiteType::class, $site);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()
$this->em->persist($site);
$this->em->flush();
$this->addFlash('success', 'Site crée avec succès');
return $this->redirectToRoute('admin.sites.index');
}
return $this->render('admin/sites/create.html.twig', [
'site' => $site,
'adresse' => $adresse,
'ville' => $ville,
'pays' => $pays,
'form' => $form->createView(),
]);
}
对应的树枝是:
<div class="row">
<div class="col s12 m12 l12">
<div class="card-panel ">
<div class="row">
{{ form_start(form) }}
{{ form_widget(form) }}
<button class="btn s12 m6 l3">{{ button|default('Enregister') }}</button>
{{ form_end(form) }}
</div>
</div>
</div>
</div>
这是您应该并且能够实现这一目标的方式: 您应该使用嵌入表单 您只需为实体创建表单类型:SiteType、adresetype、VilleType、PaysType,并按如下方式嵌入它们
// in SiteType
//....
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
//...
->add('adresse', AdresseType::class)
;
}
最后,在控制器中,您所要做的就是创建
/**
* @Route("admin/sites/new", name="admin.sites.new")
* @param Request $request
* @return RedirectResponse|Response
*/
public function new (Request $request)
{
$site = new Site();
$form = $this->createForm(SiteType::class, $site);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()
$this->em->persist($site);
$this->em->flush();
$this->addFlash('success', 'Site crée avec succès');
return $this->redirectToRoute('admin.sites.index');
}
return $this->render('admin/sites/create.html.twig', [
'site' => $site,
'adresse' => $adresse,
'ville' => $ville,
'pays' => $pays,
'form' => $form->createView(),
]);
}
对应的树枝是:
<div class="row">
<div class="col s12 m12 l12">
<div class="card-panel ">
<div class="row">
{{ form_start(form) }}
{{ form_widget(form) }}
<button class="btn s12 m6 l3">{{ button|default('Enregister') }}</button>
{{ form_end(form) }}
</div>
</div>
</div>
</div>
您必须在一种表单类型上嵌入表单。SiteType包含包含VilleType等的AddressType。您必须将表单嵌入到一种表单类型中。SiteType包含包含VilleType等的AddressType。只是一个愚蠢的问题。。。对于那些
'site'=>$site,'adrese'=>$adrese,'ville'=>$ville,'pays'=>$pays,
如何将这些变量声明为空?带有$x=new x()的null ou代码>?只是个愚蠢的问题。。。对于那些'site'=>$site,'adrese'=>$adrese,'ville'=>$ville,'pays'=>$pays,
如何将这些变量声明为空?带有$x=new x()的null ou代码>?