我需要一些幫助。 我有一個表單,我想選擇一個現有的實體或提交一個新的。所以我有一個班級Dolmetscher(語言翻譯),標題,姓名,語言。創建窗體我有功能的類InterpreterTypeSymfony使用原則的實體選擇
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('anrede', ChoiceType::class, array(
'choices' => array(
'Herr' => 'Herr',
'Frau' => 'Frau'
)
))
->add('vorname')
->add('nachname')
->add('sprache')
->add('dolmetscher', EntityType::class, array(
'class' => 'AppBundle:Dolmetscher',
'placeholder' => 'Dolmetscher wählen',
'label' => 'Dolmetscher',
'choice_value' => 'id',
'choice_label' => function ($dolmetscher) {
return $dolmetscher->getAnrede() . ' ' .
$dolmetscher->getVorname() . ' ' .
$dolmetscher->getNachname();
},
'mapped' => false,
))
->add('select', SubmitType::class, array(
'label' => 'Übernehmen',
'attr' => array(
'class' => 'btn btn-default',
'formnovalidate' => 'formnovalidate'
)
))
->add('save', SubmitType::class, array(
'label' => 'OK',
'attr' => array(
'style' => 'float: right',
'class' => 'btn btn-default'
)
))
->add('reset', SubmitType::class, array(
'label' => 'Zurücksetzen',
'attr' => array(
'style' => 'float: right; margin-right: 10px',
'class' => 'btn btn-warning',
'formnovalidate' => 'formnovalidate'
)
));
}
我也害怕與實體的選擇,這是工作,有一個新的Dolmetscher「選擇」按鈕和表單字段與「保存」按鈕。另外一個「重置」按鈕
我的控制器類看起來像
/**
* @Route("/u01/5", name="u1_5")
*/
public function dolmetscherAction(Request $request) {
$session = $this->get("session");
var_dump($session->get("foo"));
if (!$session->get("dolmetscher")) {
$dolmetscher = new Dolmetscher();
} else {
$dolmetscher = $session->get("dolmetscher");
}
$dolmetscherForm = $this->createForm(DolmetscherType::class, $dolmetscher);
$dolmetscherForm->handleRequest($request);
if ($dolmetscherForm->get('select')->isClicked()) {
$dolmetscher = $dolmetscherForm->get('dolmetscher');
$session->set("dolmetscher", $dolmetscher);
return $this->redirectToRoute('u1_5');
}
if ($dolmetscherForm->get('reset')->isClicked()) {
$dolmetscher = new Dolmetscher();
$session->set("dolmetscher", $dolmetscher);
return $this->redirectToRoute('u1_5');
}
if ($dolmetscherForm->get('save')->isClicked() && $dolmetscherForm->isSubmitted() && $dolmetscherForm->isValid()) {
$dolmetscher = $dolmetscherForm->getData();
$session->set("dolmetscher", $dolmetscher);
return $this->redirectToRoute('homepage');
}
return $this->render('urkunden/u01/5.html.twig', [
'form' => $dolmetscherForm->createView(),
'page_title' => 'U01'
]);
}
我想把Dolmetscher從選擇到$ _set以備後用,e.g。堅持數據庫,這對於新的Dolmetscher來說工作得很好,但不適合我的選擇。我得到一個異常「封閉」的
序列化是不允許
我不知道如果我做這一切的權利(我有一些一對多的關係,並希望有一個觀點爲每個實體/形式,並堅持一切在一次結束,以便我沒有在我的數據庫中,當用戶在中途退出時只有一個Dolmetscher)
我也認爲它可能是填充窗體字段從我無法工作的選擇。有人可以幫助我,我會很感激。
非常感謝您!我認爲get()會讓你得到子對象,所以實體,但你實際上必須調用getData()。這解決了我的問題 – rav
以這種方式完成這種方法是否是一種好方法,或者您有推薦的最佳做法嗎? – rav
如果你不想在那裏保存實體,並將它延遲到其他控制器,你重定向你的請求,我不能看到其他解決方案,然後使用會話。 – zizoujab