這是事情。如何在一個視圖中處理同一實體但只有一個綁定的2個窗體?
我想在一個視圖中創建2個窗體。一個綁定到一個實體,另一個是一個文件類型,我想把.csv放在裏面,並捕獲裏面的信息來填充第一個實體。
我已經創建了第一個,但我不知道如何創建第二個並在同一個視圖中正確集成它,因此它們不會互相爭鬥。這裏是我的文件(CSV過程還沒有實現)
我的控制器:
public function adminAction()
{
$form = $this->createForm(new StudentsType, null);
$formHandler = new StudentsHandler($form, $this->get('request'), $this->getDoctrine()->getEntityManager());
if($formHandler->process())
{
return $this->redirect($this->generateUrl('EnsgtiEnsgtiBundle_ens'));
}
return $this->render('EnsgtiEnsgtiBundle:Appli:admin.html.twig', array(
'form' => $form->createView(),
));
}
第一種形式:
class StudentsType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('nom', 'text')->setRequired(false)
->add('prenom', 'text')
->add('email', 'email')
->add('codeEtape', 'text')
->add('file', new StudentsListType)->SetRequired(false);
}
public function getName()
{
return 'ensgti_ensgtibundle_studentstype';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Ensgti\EnsgtiBundle\Entity\Students',
);
}
}
的處理程序:
class StudentsHandler
{
protected $form;
protected $request;
protected $em;
public function __construct(Form $form, Request $request, EntityManager $em)
{
$this->form = $form;
$this->request = $request;
$this->em = $em;
}
public function process()
{
if($this->request->getMethod() == 'POST')
{
$this->form->bindRequest($this->request);
if($this->form->isValid())
{
$this->onSuccess($this->form->getData());
return true;
}
}
return false;
}
public function onSuccess(Students $students)
{
$this->em->persist($students);
$this->em->flush();
}
}
第二形態:
class StudentsListType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('', 'file');
}
public function getName()
{
return 'ensgti_ensgtibundle_studentslisttype';
}
}
的處理程序:
class StudentsListHandler
{
protected $form;
protected $request;
protected $em;
public function __construct(Form $form, Request $request, EntityManager $em)
{
$this->form = $form;
$this->request = $request;
$this->em = $em;
}
public function process()
{
if($this->request->getMethod() == 'POST')
{
$this->form->bindRequest($this->request);
if($this->form->isValid())
{
//$this->onSuccess($this->form->getData());
print_r($this->form->getData());
return true;
}
}
return false;
}
public function onSuccess(/*StudentsList $studentsList*/)
{
//$this->em->persist($studentsList);
//$this->em->flush();
echo 'Petit test';
}
}
有了這個代碼,我得到這個:
無論財產 「文件」,也不是法 「的GetFile()」,也不是方法, 「ISFILE()」 存在於類「Ensgti \ EnsgtiBundle \ Entity \ Students「
這是正常的,因爲我綁定到沒有文件類型的實體。我是一名初學者,所以我一直在閱讀文檔,但對於我來說,仍然很難理解所有內容。有沒有一種方法,我可以在同一個視圖中創建2個表單,而不是綁定到一個實體,但通過csv處理它仍然會持續在它上面?
我確定有一種方法可以在沒有Iframe的情況下做我想做的事情,我真的很想了解Symfony是如何工作的。 – Freiyer