Получите определенные входные данные формы отдельно - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть эта форма, и я должен получить значения 3 полей (имя и 2 даты) отдельно, форматировать даты и поместить их в arrayCollection.Я только хочу получить эти 3 поля и позволить оставшейся части поля формы вставляться автоматически, как обычно.Параллельно, когда я возвращаюсь к редактированию формы, я хочу знать, как распределить эти значения для заполнения формы.

1 Ответ

1 голос
/ 06 апреля 2019

Согласно этой документации creation-form-classes , попытка решения состоит в следующем:

Мы предполагаем, что у вас есть имя организации Артикул .

  • Ваша форма может выглядеть примерно так:
    class ArticleType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('title', TextType::class)
                    ->add('author', TextType::class)
                    ->add('name', TextType::class, [
                        'mapped' => false
                    ])
                    ->add('date1', DatetimeType::class, [
                        'mapped' => false
                    ])
                    ->add('date2', DatetimeType::class, [
                        'mapped' => false
                    ]);
        }

        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults([
                'data_class' => Article::class,
            ]);
        }
    }

Здесь есть опция 'mapped' => false , потому что вы не хотите отображать ее с помощью сущности Article.

  • Тогда в вашем контроллере вы можете получить что-то вроде

    /**
     * @Route("/articles", methods={"POST", "GET"}, name="app_post_article")
     */
    public function postArticle(Request $request, EntityManagerInterface $em)
    {
        $form = $this->createForm(ArticleType::class);
        $form->handleRequest($request);

        if ($request->isMethod('POST') && $form->isSubmitted() && $form->isValid()) {
            $name = $form->get('name')->getData();
            $date1 = $form->get('date1')->getData();
            $date2 = $form->get('date2')->getData();
            //.... do something
        }
        //... Do other thing

    }

    /**
     * @Route("/articles/{id}", methods={"POST", "GET"}, name="app_edit_article")
     */
    public function editArticle(Request $request, Article $article, EntityManagerInterface $em)
    {
        $form = $this->createForm(ArticleType::class, $article);
        // $prevName, $prevDate1, $prevDate2 must be retreive first...
        $form->get('name')->setData($prevName);
        $form->get('date1')->setData($prevDate1);
        $form->get('date2')->setData($prevDate2);
        $form->handleRequest($request);

        if ($request->isMethod('POST') && $form->isSubmitted() && $form->isValid()) {
            $name = $form->get('name')->getData();
            $date1 = $form->get('date1')->getData();
            $date2 = $form->get('date2')->getData();
            //.... do something
        }
        //... Do other thing

    }

Это просто идея.

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