首页 > 解决方案 > 嵌入式控制器中的表单未提交

问题描述

我将表单嵌入到模态中,我使用嵌入式控制器来处理这个问题。

这是我的代码:控制器:

 public function affectProduitsAction(Pack $pack)
{
    $request = $this->get('request_stack')->getMasterRequest();

    $form = $this->createForm(PackAffectProduitType::class, $pack);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) { /*success*/

    }
    return $this->render('pack/affect_produits.html.twig', [
        'packForm' => $form->createView(),
    ]);
}

布局:渲染嵌入式控制器:

 <div class="button-add">
                <a class="btn btn-sm btn-primary btn-upper" data-target="#modalAffectProduit" data-toggle="modal">
                    <i class="os-icon os-icon-ui-22"></i>
                    <span>Affecter des produits</span>
                </a>
            </div>
            {{ render(controller(
                'AppBundle:Pack:affectProduits',
                {'pack': pack }
            )) }}

模态:从嵌入式控制器呈现:

<div aria-hidden="true" aria-labelledby="exampleModalLabel" class="modal fade" id="modalAffectProduit" role="dialog" tabindex="-1">
<div class="modal-dialog" role="document">
    <div class="modal-content">
        <div class="modal-header">
            <h5 class="modal-title" id="exampleModalLabel">
                Affecter des produits
            </h5>
            <button aria-label="Close" class="close" data-dismiss="modal" type="button"><span aria-hidden="true"> &times;</span></button>
        </div>
        {{ form_start(packForm, {'action':
            {# the problem is here I don't know how call the embedded controller #}
        }) }}
            <div class="modal-body">
                  ......
            </div>
            <div class="modal-footer">
                <button class="btn btn-secondary" data-dismiss="modal" type="button"> Annuler</button>
                <button class="btn btn-primary" type="button"> Affecter</button>
            </div>
        {{ form_end(packForm) }}
    </div>
</div>

问题是:当我单击提交按钮时,什么也没发生。我想从表单操作中调用嵌入式控制器,但我不知道怎么做,因为它没有路由?

标签: symfonytwigsymfony-forms

解决方案


我认为您应该将路由添加到您的控制器,然后表单才会知道发送请求的路径。并将 Request $request 参数添加到操作

public function affectProduitsAction(Request $request, Pack $pack)
{
.
.
.

并删除

$request = $this->get('request_stack')->getMasterRequest();

推荐阅读