首页 > 解决方案 > 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 但它不起作用。

有人能帮助我吗 ?

标签: formssymfonysymfony-forms

解决方案


推荐阅读