1

ユーザーがコメントを入力できるシンプルなフォームを作成しました。しかし、私が達成したいのは、特定のユーザーのデータベースにコメントを保存することです(ユーザーIDとしましょう)。その方法がわかりません。これが私がやったことです:

function some Controller(){
    $baza = new baza();

    $em = $this->getDoctrine()->getManager();
    $em->persist($baza);

    $comment = $this->createFormBuilder($baza)
                ->add('comment', 'text')
                ->getForm();

    if ($request->getMethod() == 'POST') {
        $comment->bind($request);
        if ($comment->isValid()) {
            $em->flush();
            echo "your comment have been submited";
        }

    return $this->render('AcmeWebBundle:Default:index.html.twig'
        ,array('users'   => $users
              ,'count'   => $total
              ,'comment' => $comment->createView()
    ));
}

ただし、この方法では、特定のユーザーのコメントは保存されず、代わりにデータベースに新しい行が作成されます:/

さらに、小枝コードがあります。

  {% extends 'AcmeWebBundle:Default:master.html.twig' %}
{% block strana %}
<h3>Total users: {{ count }} </h3>
{% endblock %}
{% block body %}
<h1> Recently booked</h1><br></br>
{% for user in users %}
<strong><em>{{ user.username}}</em></strong><p> From : <b>{{ user.from }}</b> To : <b>{{ user.to }}</b><br></br>
Car: <b>{{ user.car}}</b> &nbsp;Leaving on : <b>{{ user.date }}</b><br><br>
Price: <b>{{ user.price }} </b><br></br>
Comments:<br></br> {{ user.comment }} //* first to display all the comments, and than add another one *//
<br><br>

    <form action="{{ path('acme_web_homepage') }}"  method="post" {{ form_enctype(comment) }}>
        {{ form_widget(comment) }}{{ form_widget(comment['comment']) }}
     {{ form_rest(comment) }}

        <input type="submit" value=" New Comment" />
    </form>

    <br><br>-------------------------------
    </p>
    {% endfor %}{% endblock %}

また、コメント本文の空のフィールドは、最初のユーザーに対して一度だけ表示されます... ありがとうございます。

4

1 に答える 1

1

項目 1 に関連:

form->bind($request);

フォームのデータをエンティティに入れます。したがって、バインドに永続化する必要があります。試す:

    $baza = new baza();

    $em = $this->getDoctrine()->getManager();
    $em->persist($baza);

    $comment = $this->createFormBuilder($baza)
                    ->add('comment', 'text')
                    ->getForm();

    if ($request->getMethod() == 'POST') {
    $comment->bind($request);

    if ($comment->isValid()) {
        $em->persist($baza);        // Lighthart's change
        $em->flush();
        echo "your comment have been submited";
    }

また、空のオブジェクトを永続化する理由は明らかではありませんが、そうすることは明らかに悪い考えではありません。

2 番目の項目は、コントローラーのコードを見ないと解決できません。クロストークによって回答が薄まらないように、新しい質問を送信することをお勧めします。

于 2013-03-29T23:43:20.013 に答える