【问题标题】:Multiple entity in one form Symfony一种形式的多个实体 Symfony
【发布时间】:2015-01-28 18:16:35
【问题描述】:

我有一个实体“票”,我想创建一个包含许多该实体的表单。

所以我创建了一个这样的 FormType:

class TicketType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('quantity');
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => null,
        ));
    }

    public function getName()
    {
        return 'event';
    }
}

这里是我的控制器:

    $clientTickets = array();

    for ($i = 0; $i < 5; $i++) {
        clientTickets[] = new Ticket();
    }

        $formTickets = $this->createForm(new TicketType(), array('tickets' => $clientTickets));

        if ($request->getMethod() == 'POST') {
            $formTickets->handleRequest($request);
            for ($i=0; $i < $formTickets.size(); $i++) { 

                $em->persist($ticket[$i]);
             }
        }

最后是我的树枝:

{{ form_start(form, {'attr': {'class': 'form-horizontal', 'id': 'msform', 'name': 'myform', 'method': 'POST' }}) }}

                                          {% for clientTicket in form.tickets %}

                                            {{ form_widget(form.quantity) }}

                                          {% endfor %}

                                              {{ form_rest(form) }}

                                          {{ form_end(form) }}

当我进入页面时,我收到此错误:

对象“Symfony\Component\Form\FormView”的方法“tickets”不 存在于 YourBundle:folder:view.html.twi 行中

为什么我做错了?你有解决办法吗?

【问题讨论】:

标签: php symfony entity twig


【解决方案1】:

您可能必须这样做:

让我们有这个表单类型:

class TicketType extends AbstractType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder - > add('field1', 'text');
        $builder - > add('field2', 'text');
        $builder - > add('field3', 'text');
    }
    public function setDefaultOptions(OptionsResolverInterface $resolver) {
        $resolver - > setDefaults(array(
            'data_class' = > null,
        ));
    }
    public function getName() {
        return 'event';
    }
}

然后在你的控制器中你需要有这样的东西:

public function testAction( )
{
    $clientTickets = array(
        'tickets' => array(
            array(
                'field1' => 'aaa',
                'field2' => 'aaa',
                'field3' => 'aaa'
            ),
            array(
                'field1' => 'bbb',
                'field2' => 'bbb',
                'field3' => 'bbb'
            ),
            array(
                'field1' => 'ccc',
                'field2' => 'ccc',
                'field3' => 'ccc'
            )
        )
    );

    $formTickets = $this->createFormBuilder( $clientTickets )
                        ->add( 'tickets', 'collection', array( 'type' => new TicketType() ) )
                        ->getForm();

    if ($formTickets->handleRequest( $this->getRequest() )->isValid()) {
        $data = $formTickets->getData();

        var_dump( $data );
    }

    return array(
        'form' => $formTickets->createView()
    );
}

你的树枝看起来像这样:

{{ form_start(form) }}

<ul>
    {% for clientTicket in form.tickets %}
        <li>{{ form_row(clientTicket.field1) }} {{ form_row(clientTicket.field2) }} {{ form_row(clientTicket.field3) }}</li>
    {% endfor %}
</ul>

{{ form_rest(form) }}
{{ form_end(form) }}

我认为这段代码是不言自明的。希望对你有帮助

【讨论】:

  • 感谢您的回答。它可能是对的,但它仍然不起作用,我有同样的错误:-/ 我认为它是如何填充 clientTickets 数组的。你用其他数组填充它。我会用一个实体填充它。类似于:clientTickets[0] 是一个票实体; clientTickets[1] 是一个 Ticket Entity,等等。我已经编辑了我的帖子以更好地解释我是如何填写它的
  • 代码是对的,我已经测试过了。查看 clientTickets 数组是如何构建的,并尝试使用实体构建它。代替数组(如带有field1field2 等的数组),可以是一个实体。如果你用 Doctrine 调用你所有的实体,Doctrine 将返回一个 Ticket Entities 的 ArrayCollection,我们称之为$arColl。那么你应该这样做:$clientTickets['tickets'] = $arColl;
【解决方案2】:

更新: 我认为你需要做这样的事情:

{% for i in 0..form|length %}
    {{ form[i].method }}
{% endfor %}

【讨论】:

  • 我已经编辑了我的帖子。我解释了如何在将 clientTickets 声明为数组后填充它。我愿意: $clientTickets = array(); for ($i = 0; $i
猜你喜欢
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多