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

У меня есть 3 объекта: Languages, Country и SetupWizard, который содержит отношение ManyToOne с предыдущими объектами через свойства languageID и countryID.У меня также есть SetupWizardType, поэтому я могу построить форму следующим образом:

$builder
    ->add('language', EntityType::class, [
        'translation_domain' => 'labels',
        'label' => 'label.languages',
        'placeholder' => false,
        'class' => Languages::class,
    ])
    ->add('country', EntityType::class, [
        'translation_domain' => 'labels',
        'label' => 'label.countries',
        'placeholder' => false,
        'class' => Countries::class
    ]);

Как вы можете видеть, в окончательной форме будет 2 поля выбора с их параметрами, и когда пользователь выбирает параметр изВыбор языков, запускается событие jquery, которое отправляет форму и передает задание моему контроллеру:

$entityManager = $this->getDoctrine()->getManager();
$setupWizard = $entityManager->getRepository(SetupWizard::class)->findSetup(1)
    ?? new SetupWizard();

$form = $this->createForm(SetupWizardType::class, $setupWizard);
$form->handleRequest($request);
$userLanguage = $form->get('language');

if ( $form->isSubmitted() ) {

    $submittedData = $form->getData();

    if( !empty($userLanguage->getData()) && empty($_POST['save']) ){

        $setupWizard->setLanguage($userLanguage->getData());
        $entityManager->persist($setupWizard);
        $entityManager->flush();
        return $this->redirectToRoute('wizard_index');

    } elseif( $form->isValid() && !empty($_POST['save']) ) {

        $entityManager->persist($submittedData);
        $entityManager->flush();
        return $this->redirectToRoute('app_homepage');
    }
}

Что это делает?Ну, есть два случая, в первом была выбрана языковая опция, поэтому я сохраняю ее в БД, а на следующей странице загружает подписчик, проверяет его и меняет локаль, чтобы я мог отображать дополнительные поля / данные этой формы с помощьютребуемый язык. Во втором случае он проверяет, была ли заполнена вся форма и является ли она действительной, поэтому я могу вставить все значения в БД.

Почему я сделал это так?Я не знал лучшего способа, чтобы быть честным ... ajax находится вне предрассудков, потому что мне нужно, чтобы данные отображались на выбранном языке, и это возможно только посредством кодирования на стороне сервера ... я думаю. Если вы знаете лучший способделать это, пожалуйста, дайте мне знать.В чем проблема с моим кодом?В первом случае я хотел вставить только язык, вместо этого были добавлены все поля ... Это может быть потому, что я использовал поля EntityType, и когда я $entityManager->persist($setupWizard);, он сохраняет весь объект. Есть способ сохранить толькозначение языка?

PS дайте мне знать, если вы думаете, что часть моего кода может быть преобразована в более качественную, что поможет мне узнать больше, так как я новичок в Symfony / doctrine.

...