在我的例子,我有我想要使用一個博客平臺四個實體:所有者帖子用戶位置如何構建Symfony來檢查`onChange`下拉字段?
- 的所有者可以有多個帖子
- A 後可以有多個用戶和位置
我試圖創建一個管理員的形式,我可以從下拉菜單中選擇所有者,這將刷新表單onChange
填充帖子的下拉菜單。
當郵政然後選擇,形式再次用表單字段用戶和關聯到該柱位置刷新。我可以然後:
- 更新更多的信息,現有的實體(例如用戶的出生日期或地點的GPS座標)
- 創建任何一個實體的新實例附加到郵政
我還沒有包含位置實體並沒有包含名稱空間/包含語句,因爲它們會降低我如何在控制器/ Formtypes中編寫這樣一個管理頁面的主要問題(我的嘗試如下):
控制器:
/**
* @Route("/adminposts", name="admin_posts")
*/
public function updatePostsAction(Request $request)
{
$user = new User();
$form = $this->createForm(new UserType(), $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($owner);
$em->persist($post);
$em->persist($user);
$em->persist($location);
$em->flush();
return $this->redirectToRoute('homepage');
}
return $this->render('AppBundle:Default:adminupdate.post.html.twig', array(
'form' => $form->createView(),
));
}
用戶Formtype:
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('owner','entity',array(
'class'=>'AppBundle:Owner',
'choice_label'=>'username',
'query_builder'=>function(EntityRepository $er) {
return $er->createQueryBuilder('d')
->orderBy('d.username','ASC');
}))
->add('post','entity',array(
'class'=>'AppBundle:Post',
'choice_label'=>'posttext',
'query_builder'=>function(EntityRepository $er) {
return $er->createQueryBuilder('d')
->orderBy('d.postdate','ASC');
}))
->add('Firstname')
->add('Surname')
->add('DOB')
->getForm();
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Users',
));
}
public function getName()
{
return 'user';
}
}
我建議你使用Ajax,你有試過嗎? – Delphine
謝謝@Delphine,我在開始使用Symfony之前曾嘗試過Ajax - 說實話,我不確定我將如何在Symfony中實現Ajax以及OO框架和樹枝模板。你能指出我正確的方向嗎? – Bendy