我有一個應用程序,裁判可以註冊不同的比賽。對於每場比賽,我需要提出一系列不同的問題。所以我將問題轉移到yaml文件中,並添加了足夠的信息,以便我可以動態地創建表單元素。所以基本上我想有:
# tourn.yml
tourns:
opencup:
desc: "USSF Open Cup 2013 - Decatur, Alabama - April 12, 13, 14"
plan:
lodgingNights:
Fri:
type: radio
label: Lodging Friday Night
date: '2013-04-12'
choices: [No: No, Yes: Yes]
default: No
Sat:
type: radio
label: Lodging Saturday Night
date: '2013-04-13'
choices: [No: No, Yes: Yes]
default: No
availabilityDays:
Fri:
type: select
label: Availability Friday
date: '2013-04-12'
default: None
choices:
None: None
Evening: Kickoff 5PM
Not Sure: Not Sure
etc
所以計劃陣最終被傳遞到計劃子窗體這反過來又創造所有單個表單元素。然後我有一個單獨的計劃實體,它將所有單獨的選擇存儲在一個數組數據庫列中。似乎工作正常。
============================================== =========================
評論需要更多的代碼。這是我的「動態」 PlanFormType」
class PlanFormType extends AbstractType
{
protected $metaData = null;
public function getName() { return 'cerad_tourn_person_plan'; }
public function setMetaData($data) { $this->metaData = $data; }
public function getMetaData( ) { return $this->metaData; }
public function buildForm(FormBuilderInterface $builder, array $options)
{
$items = $this->getMetaData();
foreach($items as $name => $item)
{
$isChoice = false;
switch($item['type'])
{
case 'radio':
$isChoice = true;
$expanded = true;
$multiple = false;
$attr = array('class' => 'radio-medium');
break;
case 'select':
$isChoice = true;
$expanded = false;
$multiple = false;
$attr = array();
break;
case 'text':
$attr = array();
if (isset($item['size'])) $attr['size'] = $item['size'];
$builder->add($name,'text',array(
'label' => $item['label'],
'required' => false,
'attr' => $attr,
));
break;
}
if ($isChoice)
{
$builder->add($name,'choice',array(
'label' => $item['label'],
'required' => false,
'empty_value' => false,
'choices' => $item['choices'],
'expanded' => $expanded,
'multiple' => $multiple,
'attr' => $attr,
));
}
}
}
}
是否可以張貼一些代碼的呢?這是真的很有幫助。我試圖弄清楚如何將其保存在控制器中。我有我的窗體票務實體,但希望將此作爲子表單。 –