我在symfony上,我使用收集表格建立一个网站来预订节目门票。
界面很简单,用户选择他想要的门票数量,然后显示所需的门票原型。这部分适合我。
但我想只显示2个字段(姓名和姓氏)而不是我的方坯实体的年龄字段(我的表格的另一部分会被询问)。
在文档中,他们解释说你只能显示一个字段(如果我理解的话):
<ul class="billets" data-prototype="{{ form_widget(form.billets.vars.prototype.surname)|e }}">
&#13;
或所有实体字段:
<ul class="billets" data-prototype="{{ form_widget(form.billets.vars.prototype)|e }}">
&#13;
但不是2个字段,因为当我尝试这个时,它只显示第一个字段:
<ul class="billets" data-prototype="{{ form_widget(form.billets.vars.prototype.name)|e }}">
<ul class="billets" data-prototype="{{ form_widget(form.billets.vars.prototype.surname)|e }}">
&#13;
这是我的方坯类型:
class BilletType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('surname', TextType::class)
->add('name', TextType::class)
->add('dateOfBirth', BirthdayType::class)
;
}
}
&#13;
答案 0 :(得分:0)
为了避免渲染字段,我使用选项{'render_rest': false}) }
{{ form_widget(edit_form._token) }}// mandatory but hidden
{{ form_end(edit_form, {'render_rest': false}) }} //closing the form
这样只会渲染twig中指定的字段。
答案 1 :(得分:0)
试试这个:
像这样创建自定义BilletType:
class CustomBilletType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('surname', TextType::class)
->add('name', TextType::class)
;
}
}
在主窗体中嵌入此CustomFormType:
class BilletType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('billets', CollectionType::class, array(
'entry_type' => new CustomBilletType,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false, //use this for set dateOfBirth for all billet in your collection
))
->add('dateOfBirth', BirthdayType::class)
;
}
}
您将获得仅包含dateOfBirth字段的方坯集合。
为了保留所有方坯的dateOfBirth,请参见以下实体:
/**
* Constructor
*/
public function __construct()
{
$this->billets = new ArrayCollection();
}
/**
* Add billets
*
* @param \AppBundle\Entity\Billet $billet
* @return Billet
*/
public function addBillet(Billet $billet)
{
$this->billets[] = $billet;
$billet->setDateOfBirth($this->dateOfBirth); //Set the same date for all your billet
return $this;
}
我希望我理解你的问题..