forms - Symony:为每个元素渲染一个表单
问题描述
我正在尝试为我创建它们的同一页面上的每个元素以模式呈现编辑表单,但似乎不可能多次呈现相同的表单。
这是我的控制器:
/**
* @Route("/outcome", name="outcome")
*/
public function index(OutcomeRepository $repo, Request $request, EntityManagerInterface $manager): Response
{
$outcomes = $repo->findAll();
$outcome = new Outcome();
$form = $this->createForm(OutcomeType::class, $outcome);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$manager->persist($outcome);
$manager->flush();
$this->addFlash(
'success',
"Income <strong>{$outcome->getTitle()}</strong> has been added."
);
return $this->redirectToRoute('outcome');
}
return $this->render('outcome/outcome.html.twig', [
'outcomes' => $outcomes,
'form' => $form->createView(),
]);
}
这是结果类型:
class OutcomeType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TextType::class, [
'label' => "Title",
'attr' => [
'placeholder' => "Write a title"
]
])
->add('amount', MoneyType::class, [
'label' => "Amount",
'attr' => [
'placeholder' => "Write an amount"
]
])
->add('save', SubmitType::class, [
'label' => 'Send',
'attr' => [
'class' => 'btn btn-primary'
]
]);
}
这是树枝部分:
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#newOutcomeModal">
New outcome
</button>
<div class="modal fade" id="newOutcomeModal" tabindex="-1" aria-labelledby="newOutcomeModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="newOutcomeModal">Add a new outcome</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
{{form_start(form)}}
{{form_widget(form)}}
{{form_end(form)}}
</div>
</div>
</div>
</div>
{% for outcome in outcomes %}
<div class="card m-4">
<div class="card-body">
<h5 class="card-title">{{outcome.title}}</h5>
<p class="card-text">{{outcome.amount}}</p>
<button type="button" class="btn btn-secondary" data-bs-toggle="modal" data-bs-target="#editOutcomeModal{{outcome.id}}">Edit</button>
</div>
</div>
<div class="modal fade" id="editOutcomeModal{{outcome.id}}" tabindex="-1" aria-labelledby="editOutcomeModal{{outcome.id}}" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="editOutcomeModal{{outcome.id}}">Edit {{outcome.title}} outcome</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
{{form_start(form)}}
{{form_widget(form)}}
{{form_end(form)}}
</div>
</div>
</div>
</div>
{% endfor %}
我收到错误消息:“在渲染模板期间引发了异常(“字段“结果”已被渲染,将先前渲染调用的结果保存到变量并输出。”)。
我不知道如何解决这个问题。我试图将 OutcomeType 的字段转换为 collectionType 但它不起作用。
有人能帮助我吗 ?
解决方案
推荐阅读
- math - 如何在 3d 空间中旋转矢量?坐标系不是全局 xyz。我有坐标系每个轴的向量
- math - 给定一个排名的人员列表,我怎样才能有效地将他们分成 2 个平衡的团队?
- thrift - 为什么apache thrifts 传输层分为低级传输和传输包装器
- python - 输入列表中不存在中值?
- java - org.springframework.jms.IllegalStateException:会话已关闭
- mysql - 如果我向某人或某人向我发送消息,我想显示不同用户的信使等名称,按 id desc 排序
- ios - 具有大量图像的 UITableView
- javascript - 在单个文件中导入所有 vue js 组件
- ios - ios背景白色渐变
- tableau-api - 如何从相对日期过滤器中获取天数?