Php 编辑所有实体的表格';一页中的s对象Symfony3
我想在一个视图中编辑所有对象的表单 我已经有了这样的效果: 但是当我试图编辑一个简单的对象时,它不起作用 Corrections.html.twigPhp 编辑所有实体的表格';一页中的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
<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()方法,以便您可以为每个表单设置不同的名称。然后您可以检查提交的表单。检查我的答案以获得更新的代码。谢谢,伙计!:)