许多原型为收集类型

时间:2016-06-02 12:00:57

标签: javascript forms symfony doctrine-orm prototype

我在symfony上,我使用收集表格建立一个网站来预订节目门票。

界面很简单,用户选择他想要的门票数量,然后显示所需的门票原型。这部分适合我。

但我想只显示2个字段(姓名和姓氏)而不是我的方坯实体的年龄字段(我的表格的另一部分会被询问)。

在文档中,他们解释说你只能显示一个字段(如果我理解的话):



<ul class="billets" data-prototype="{{ form_widget(form.billets.vars.prototype.surname)|e }}">
&#13;
&#13;
&#13;

或所有实体字段:

&#13;
&#13;
<ul class="billets" data-prototype="{{ form_widget(form.billets.vars.prototype)|e }}">
&#13;
&#13;
&#13;

但不是2个字段,因为当我尝试这个时,它只显示第一个字段:

&#13;
&#13;
<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;
&#13;
&#13;

这是我的方坯类型:

&#13;
&#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;
&#13;
&#13;

Here is what I want to get

2 个答案:

答案 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;
}

我希望我理解你的问题..