Невозможно вставить данные в базу данных, используя форму в Symfony2 - PullRequest
2 голосов
/ 21 сентября 2011

У меня есть форма, где пользователь вводит данные.Затем, когда они нажимают кнопку отправить, эти данные будут сохранены в базе данных.

Единственное, что он этого не делает.Что происходит, так это то, что при нажатии кнопки «Отправить» страница перезагружается, и все данные, введенные в форму, все равно будут отображаться.Я иду, чтобы проверить базу данных, и записи не были обновлены.

Нет ошибок, но согласно профилировщику, при загрузке страницы выполняется три оператора SQL.Все три из них являются операторами SELECT, а не одним оператором INSERT.

Вот код страницы в контроллере (включая инструкцию "INSERT"):

    public function addAction(Request $request)
{   

    $pageadd = new Content();
    $form = $this->createForm(new PageAdd(), $pageadd);

    $request = $this->getRequest();
    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getEntityManager();

            $em->persist($pageadd);
            $em->flush();

            return new Response('Created page id '.$pageadd->getId());

        }
    }

    return $this->render('ShoutAdminBundle:Default:pageadd.html.twig', array(
        'form' => $form->createView()
    ));

}

Здеськод для формы (некоторые поля были опущены из-за нехватки места. Но все они идентичны):

<form action="{{ path('ShoutAdminBundle_adminpageaddpost') }}" method="post" {{ form_enctype(form) }} class="blogger">

    <p class="row">
        {{ form_label(form.id, 'ID*', { 'attr': {'class': 'title'} }) }}
        {{ form_errors(form.id) }}
        {{ form_widget(form.id, { 'attr': {'class': 'textfield'}}) }}
    </p>
    <p class="row">
        {{ form_label(form.title, 'Title*', { 'attr': {'class': 'title'} }) }}
        {{ form_errors(form.title) }}
        {{ form_widget(form.title, { 'attr': {'class': 'textfield'}}) }}
    </p>

    <p class="row">
        <input type="submit" value="Save This Page" class="savebutton" />
    </p>
</form>

Если вам понадобится больше кода, я предоставлю их.Я думаю, что в этих двух фрагментах кода проблема кроется.

Приветствия!

1 Ответ

2 голосов
/ 03 декабря 2011

Вы должны заполнить сущность, прежде чем упорствовать, я приведу вам пример:

public function saveAction(Request $request)
{
    if ($request->getMethod() == 'POST') {
        // EntityManager
        $em = $this->getDoctrine()->getEntityManager();

        // New entity
        $registration = new Customer();

        // Build the form
        $form = $this->createFormBuilder()
        ->add('name', 'text')
        ->add('country', 'text')
        ->add('email', 'email')
        ->add('certificate', 'text')
        ->add('provider', 'entity', array(
              'class' => 'YourCustomBundle:Partner',
        ))
        ->getForm();

        // Populate
        $form->bindRequest($request);

        // Check
        if($form->isValid()) {
            // Fill the entity
            $registration->setName($form['name']->getData());
            $registration->setCountry($form['country']->getData());
            $registration->setEmail($form['email']->getData());
            $registration->setCertificate($form['certificate']->getData());
            $registration->setProvider($form['provider']->getData());
            $em->persist($registration);
            $em->flush();
        }   

    }
    return $this->render('YourCustomBundle:Default:index.html.twig',array(
            'form' => $form->createView(),
    ));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...