Php 编辑所有实体的表格';一页中的s对象Symfony3

Php 编辑所有实体的表格';一页中的s对象Symfony3,php,forms,twig,symfony,Php,Forms,Twig,Symfony,我想在一个视图中编辑所有对象的表单 我已经有了这样的效果: 但是当我试图编辑一个简单的对象时,它不起作用 Corrections.html.twig <div class="row"> <div class="col-sm-10 col-sm-offset-1"> <table class="table table-bordered"> <thead> <tr&g

我想在一个视图中编辑所有对象的表单

我已经有了这样的效果:

但是当我试图编辑一个简单的对象时,它不起作用

Corrections.html.twig

<div class="row">
    <div class="col-sm-10 col-sm-offset-1">
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>Nazwa poprawki</th>
                    <th>Status dla</th>
                    <th>Status dla klienta</th>
                    <th>Nazwa projektu</th>
                    <th>Klient</th>
                    <th>Obszar</th>
                    <th>Piorytet</th>
                    <th>Data utworzenia</th>
                    <th>Iteracja</th>
                </tr>
            </thead>
            <tbody>

                {% for correction in corrections %}
                    {{ form_start(form[loop.index0]) }}
                    <tr>
                        <td>{{correction.correctionName}}</td>
                        <td>{{ form_widget(form[loop.index0].adminStatusCorrectionId) }}</td>
                        <td>{{ form_widget(form[loop.index0].userStatusCorrectionId) }}</td>
                        <td>{{correction.projectId.projectName}}</td>
                        <td>{{correction.projectId.userId.firstName}} {{correction.projectId.userId.lastName}}</td>
                        <td>{{ form_widget(form[loop.index0].areaId) }}</td>
                        {% if correction.priority %}
                            <td>Tak</td>
                        {% else %}
                            <td>Nie</td>
                        {% endif %}
                        <td>{{correction.creationDate|date('Y-m-d')}}</td>
                        <td>{{correction.iteration}}</td>
                        <td>{{ form_widget(form[loop.index0].save) }}</td>
                    </tr>
                    </form>
                    {{ form_end(form[loop.index0]) }}
                {%endfor %}

            </tbody>
        </table>
    </div>
</div>
CorrectionType.php

public function correctionsAction(Request $request) {
    $repository = $this->getDoctrine()->getRepository('AppBundle:Correction');
    $corrections = $repository->findAll();

    foreach ($corrections as $key => $value) {
        $form = $this->createForm(CorrectionType::class, $corrections[$key]);
        $formView[] = $form->createView();
    }
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $correction = $form->getData();
        $em = $this->getDoctrine()->getManager();
        $em->persist($correction);
        $em->flush();

        return $this->redirectToRoute('admin_view_corrections');
    }

    return $this->render('administrator/corrections.html.twig', array(
                'corrections' => $corrections,
                'form' => $formView
    ));
}
class CorrectionType extends AbstractType {

    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add('adminStatusCorrectionId', EntityType::class, array(
                    'class' => 'AppBundle:AdminStatusCorrection',
                    'choice_label' => 'statusName'
                ))
                ->add('userStatusCorrectionId', EntityType::class, array(
                    'class' => 'AppBundle:UserStatusCorrection',
                    'choice_label' => 'statusName'
                ))
                ->add('areaId', EntityType::class, array(
                    'class' => 'AppBundle:Area',
                    'choice_label' => 'areaName'
                ))
                ->add('save', SubmitType::class, array('label' => 'Aktualizacja'))
        ;
    }

    public function configureOptions(OptionsResolver $resolver) {
        $resolver->setDefaults(array(
            'data_class' => Correction::class,
        ));
    }

}
我现在能做什么

编辑

我所有的表格都有“更正”的名字

在本例中,我有12张表格:

<form name="correction" method="post"></form>

您应该在foreach循环中处理表单,还需要为每个表单指定不同的名称,以便可以使用“form.factory”的createNamed()方法:

foreach ($corrections as $key => $value) {
    $formName = 'form_' . $key;
    $form = $this->get('form.factory')->createNamed($formName, CorrectionType::class, $corrections[$key]);

    if ($request->getMethod() === 'POST' && $request->request->has($formName)) {
        $form->handleRequest($request);
    }

    if ($form->isSubmitted() && $form->isValid()) {

        $correction = $form->getData();
        $em = $this->getDoctrine()->getManager();
        $em->persist($correction);
        $em->flush();

        return $this->redirectToRoute('admin_view_corrections');
    }

    $formView[] = $form->createView();
}

你能告诉我们你得到的错误吗?谢谢你的回答。编辑一行时,将编辑每一行。那么现在问题出在哪里呢?:)您能告诉我如何使用'form.factory'的createNamed()方法吗?我尝试了很多次,但都没有成功:/问题是所有表单都有相同的名称,handleRequest()方法无法识别提交了哪个表单。我更新了答案,使用'form.factory'服务的createNamed()方法,以便您可以为每个表单设置不同的名称。然后您可以检查提交的表单。检查我的答案以获得更新的代码。谢谢,伙计!:)