以树枝形式获取所选选项和所有请求数据

时间:2017-04-02 15:10:40

标签: symfony twig html-form

我在twig中有这个表单,我希望从一个简单的html表单中获取所选选项和输入字段的值:

(PS:不要说'你最好使用控制器生成一个表单!'我知道,但我有理由为什么要创建一个表单twig:因为这允许我使用for循环创建任意数量的表单。)

我试图在行动路径中传递参数,但这并不起作用。

<form action="{{ path('changeProf') }}" method="post" id="form">
    <section class="col-lg-9 col-md-9 col-sm-9 col-xs-9" style="position: relative; left: 35%;top: 6vmin">
        <label style="display:inline-table;">
            <span> <input type="text" value="{{ user.id }}" disabled="true" id="iduser"style="max-width: 18vmin;"/></span>
        </label>
    </section>
    <section class="col-lg-9 col-md-9 col-sm-9 col-xs-9"style="position: relative; left: 35%;top: 6vmin">
        <label style="display:inline-table;">
            <span>{% set k=1 %}
                <select id="profil">
                {% for prof in profArr %}
                    <option value="{{ prof }}"> {{ prof }} </option>
                {% endfor %}
                </select>
            </span>
        </label>
    </section>
    <input type="submit" class="btn btn-info btn-xs" style="position: relative;top:18vmin;left:-28%">
</form>

这是处理表单的操作:

  /**
     * @Route("/profile/chProf",name="changeProf")
     * Method ("POST")
     * @Template()
     */
    public function changeProfAction(Request $request)
    {
        $session = new Session();
        $session->start();
        $search = $session->get('user');
        $gestAcces = $session->get('acces');
        $gestEtat = $session->get('etatUser');
        $gestCont = $session->get('contenu');
        $repMsg = $session->get('repMsg');
        $gestRec = $session->get('Reclam');
        $gestMess = $session->get('gestMess');
        $gestMp = $session->get('gestMp');


        if ($search == Null) {
            return $this->redirectToRoute('empty', array('search' => $search,
                'contenu' => $gestCont,
                'gestAcces' => $gestAcces,
                'gestEtat' => $gestEtat,
                'repMsg' => $repMsg,
                'gestRec' => $gestRec,
                'gestMess' => $gestMess,
                'gestMp' => $gestMp,
            ));
        }

        $em = $this
            ->getDoctrine()
            ->getManager();
        $reposit = $em->getRepository("CNAMCMSBundle:userprof");
        $rep = $em->getRepository("CNAMCMSBundle:profil");

        $userprof=new userprof();
        $libprof=$request->request->get('profil');
        $iduser=$request->request->get('iduser');

        $idprof=$rep->findOneBy(array('libelle'=>$libprof));
        $userprof->setIdUser($iduser);
        $userprof->setIdProfil($idprof);
        $em->persist($userprof);
        $em->flush();

        return $this->render('CNAMCMSBundle:Default:userProf.html.twig', array(
            'search'=>$search,
            'contenu'=>$gestCont,
            'gestAcces'=>$gestAcces,
            'gestEtat'=>$gestEtat,
            'repMsg'=>$repMsg,
            'gestRec'=>$gestRec,
            'gestMess'=>$gestMess,
            'gestMp'=>$gestMp,

        ));

    }

1 个答案:

答案 0 :(得分:1)

我想我发现了导致你收到错误的原因。

  1. $request->request->get('profil');返回NULL。
  2. 这意味着,表单发送profil条目。
  3. 查看表单中的profil

    <input type="text" value="{{ user.id }}" disabled="true" id="iduser"style="max-width: 18vmin;"/>
    
  4. 没有name属性!这实际上是与请求一起发送的内容。 名称属性,而不是 id id 仅用于本地样式和javascripts。

  5. 解决方案:

    <input type="text" value="{{ user.id }}" disabled="true" id="iduser" name="iduser" style="max-width: 18vmin;"/>
    
  6. profil

  7. 执行相同操作

    希望这有帮助。