使用来自其他实体symfony2的数据更新实体字段

时间:2015-10-11 18:34:49

标签: php symfony

我在数据库中有两个表 - 订单和卡车。他们有关系ManyToOne。当我收到订单时 - 默认情况下卡车字段为空。卡车表有preconfig数据。所以我的任务:对于我用findAll()方法恢复的每个订单实体并发送到twig(渲染为表格)make复选框,这样我就可以为每个订单指定卡车。 这是订购卡车的形式:

    class TruckType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name', 'entity', array(
            'class' => 'AppBundle:Trucks',
            'choice_label' => 'name',
            'label' => false,
            'multiple' => false,
            'required' => false,
        ));

    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Orders',
        ));
    }

    /**
     * Returns the name of this type.
     *
     * @return string The name of this type
     */
    public function getName()
    {
        return 'TruckType';
    }

}

还有树枝:

            {% for order in orders %}
        <tr>
            <td width="30%">{{ order.name }}</td>
            <td width="30%">{{ order.delivery }}</td>
            <td width="15%">{{ order.stock }}</td>
            <td width="15%">{{ form_widget(truckform) }}</td>
        </tr>
        {% endfor %}

但是这个渲染复选框仅适用于表格中的第一个实体。哪里错了?

1 个答案:

答案 0 :(得分:1)

您没有显示生成truckform变量的代码,但我猜您只是使用TruckType表单类型实例化表单。这种方法的问题在于Symfony不会多次渲染表单或表单字段,因此您的{{ form_widget(truckform) }}片段只会呈现第一次循环迭代。如果您考虑一下,这是有道理的,否则您将拥有许多具有相同名称和ID 的表单字段,当您提交表单时,将无法区分它们。您需要采用不同的方法,使用嵌入式表单。看看这个Symfony doc页面,它将为您指明正确的方向:How to Embed a Collection of Forms