首页 > 解决方案 > Symfony Form "POST" -> 检索表单的值以将它们输入数据库

问题描述

大家晚上好,

我允许自己与您联系,因为我需要有关在 Symfony 中以“POST”形式检索值的帮助。

此表格的目的是:“用户可以通过填写表格在网站上发表意见”

我的问题:我在我的控制器中进行了测试以执行“功能”,这将允许我从 POST 表单中检索用户发送的信息以将它们发送到我的数据库,除了几次尝试后,我没有失败输入我的数据库中的信息,除了“NULL”

你可以帮帮我吗?先感谢您。

我的 HTML.TWIG “POST” 表单:

<div class="col-md-8 mx-auto" id="formavisall">
                <form method="post">
                    <div class="row">
                        {% for message in app.flashes('message') %}
                            <div class="col-md-12" style="text-align: center">
                                <div class="alert alert-success">
                                    {{ message }}
                                </div> <!-- FIN p-3 my-2 rounded-2 success -->
                            </div> <!-- FIN COL-MD-12 (ID MESSAGECONFIRMATIONUSER) -->
                        {% endfor %}
                        {% for message in app.flashes('error') %}
                            <div class="col-md-12" style="text-align: center">
                                <div class="alert alert-danger">
                                    {{ message }}
                                </div> <!-- FIN p-3 my-2 rounded-2 success -->
                            </div> <!-- FIN COL-MD-12 (ID MESSAGECONFIRMATIONUSER) -->
                        {% endfor %}
                        <div class="col-md-12" id="inputradionoteavis">
                            <input type="radio" name="note" id="note" value="1">
                            <label for="note"></label>
                            <input type="radio" name="note" id="note" value="2">
                            <label for="note"></label>
                            <input type="radio" name="note" id="note" value="3">
                            <label for="note"></label>
                            <input type="radio" name="note" id="note" value="4">
                            <label for="note"></label>
                            <input type="radio" name="note" id="note" value="5">
                            <label for="note"></label>
                        </div>
                        <div class="col-md-6" id="inputformcontact">
                            <div class="form-group">
                                <label for="nameavis">Nom :</label>
                                <input type="text" class="form-control" name="nom" id="nom">
                            </div> <!-- FIN form-group -->
                        </div>
                        <div class="col-md-6" id="inputformcontact">
                            <div class="form-group">
                                <label for="firstnameavis">Prénom :</label>
                                <input type="text" class="form-control" name="prenom" id="prenom">
                            </div> <!-- FIN form-group -->
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-md-12" id="messageareacontact">
                            <div class="form-group">
                                <label for="messageavis">Message :</label>
                                <textarea class="form-control" id="message" name="message"></textarea>
                            </div> <!-- FIN form-group -->
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-md-12">
                            <div class="form-group">
                                <input type="hidden" name="section" value="content">
                            </div> <!-- FIN form-group -->
                        </div>
                    </div> <br>
                    <div class="row" id="rowbuttoncontact">
                        <div class="col-md-5 mx-auto">
                            <button type="submit" class="form-control" id="buttonformcontact">Laisser un avis</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>

我的控制器中的“测试”功能:

if($request->isMethod('POST')){
            $em = $this->getDoctrine()->getManager();
 
            $avis = new Avis();
 
            // On vérifie si les deux mots de passe sont identiques
 
            if($request->request->get('nom') && $request->request->get('prenom') && $request->request->get('message')
                && $request->request->get('note') && $request->request->get('section')){
                $em->persist($avis);
                $em->flush();
                $this->addFlash('message', 'L\'avis a été publié');
 
                return $this->redirectToRoute('accueil');
            }else{
                $this->addFlash('error', 'L\'avis n\'a pas été publié');
            }
        }

标签: formssymfonypostcontroller

解决方案


您似乎没有$avis在控制器中更新。您应该尝试在其中添加一些if内容以设置属性:

$avis->setNom($request->request()->get('nom'));
$avis->setPrenom($request->request()->get('prenom'));
$avis->setMessage($request->request()->get('message'));
...

Symfony 中还有一个Form组件可以处理所有这些,从而为您省去麻烦:https ://symfony.com/doc/current/forms.html


推荐阅读