Форма не отправляет данные в базу данных - PullRequest
0 голосов
/ 11 октября 2018

Я новичок в Symfony и прочитал почти все сообщения об отправке данных в базу данных.Я включил все ответы / решения, но все еще не отправлять в БД.Может ли кто-нибудь помочь, пожалуйста?

Я создал форму и хочу отправить все значения в свою базу данных. Я также создал объект с классом "Профиль"

* 1006.*

// new_profile.html.twig

{{ form_start(form) }}
{{ form_label(form.userName, 'Name') }}

{{ form_widget(form.userName, {'attr': {'placeholder': 'Your name', 'value':''} }) }}

{{ form_label(form.userPosition, 'Position') }}
{{ form_widget(form.userPosition, {'attr': {'placeholder': 'Your position', 'value':''} }) }}

{{ form_label(form.userPhone, 'Phone') }}
{{ form_widget(form.userPhone, {'attr': {'placeholder': 'Your phone', 'value':''} }) }}

{{ form_label(form.userEmail, 'E-mail') }}
{{ form_widget(form.userEmail, {'attr': {'placeholder': 'Your e-mail', 'value':''} }) }}

{{ form_label(form.userDepartment, 'Department') }}
{{ form_widget(form.userDepartment, {'attr': {'placeholder': 'Your department', 'value':''} }) }}

{{ form_rest(form) }}
{{ form_end(form) }}

1 Ответ

0 голосов
/ 11 октября 2018

Во-первых, вы должны разбить свой код.Ваш файл контроллера должен контролировать что происходит - не делать и строить все.

Создайте свою форму в каталоге Src/Form.Создайте новую папку с именем Profile и создайте файл с именем AddType.php - полный путь должен быть Src/Form/Profile/AddType.php.

# Src/Form/Profile/AddType.php

<?php
    namespace App\Form\Profile;

    use App\Entity\Profile;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\Extension\Core\Type\CheckType;
    use Symfony\Component\Form\Extension\Core\Type\SubmitType;
    use Symfony\Component\Form\Extension\Core\Type\TextType;

    class AddType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('userName', TextType::class)
                ->add('userDepartment', ChoiceType::class, array(
                    'placeholder' => 'Select department',
                    'choices' => array(
                        'HR' => 'hr',
                        'Marketing' => 'marketing',
                        'Development' => 'development',
                        'Finance'   => 'finance',
                        'Logistics' => 'logistics',
                    ),
                ))
                ->add('userPosition', TextType::class)
                ->add('userPhone', TextType::class)
                ->add('userEmail', TextType::class)
                ->add('save', SubmitType::class, array('label' => 'Create Profile'));
        }

        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => Profile::class
            ));
        }
    }

Тогда в вашем контроллере:

<?php
    class CreateController extends Controller
    {
        public function index(Request $request)
        {
            $profile = new Profile();

            $form = $this->createForm(AddType::class, $profile);
            $form->handleRequest($request);

            if ($form->isSubmitted() && $form->isValid()) {
                $em = $this->getDoctrine()->getManager();

                $em->persist($profile);
                $em->flush();
                # what other actions you need. e.g redirect to success page
            }

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

Затем выполните рендерингформа в вашей ветке:

# templates/product/add.html.twig

{{ form_start(form) }}
    {# your custom code for rendering the form #} 
    {# if you leave default then it should render with bad styles etc. #}
{{ form_end(form) }}

Примечание: Возможно, вам придется изменить вышеуказанный код в соответствии с вашими потребностями кодирования, но должно (теоретически) работать - это работает со страницы, созданной сфайл ветки - у вас не должно быть формы в контроллере, если вы не планируете использовать форму.Просто передайте данные вручную ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...