Symfony形式,生成另一种形式

问题描述 投票:0回答:1

我有一个控制器动作,提示用户输入一些自由文本。提交时,文本被解析为我想在另一个表单上放置的一些对象,以便用户确认初始解析是否正确完成。

通常在处理对表单提交的响应之后,我们将$this->redirectToRoute()称为其他路径,但我将所有这些对象放在我想要使用的周围。如果我重定向到其他地方,我会失去它们。

我怎么能保留它们?我尝试在控制器操作方法中构建我的新表单但是它的提交似乎没有得到正确处理。

/**
 * @Route( "/my_stuff/{id}/text_to_objects", name="text_to_objects" )
 */
public function textToObjects( Request $request, Category $category ) {
    $form = $this->createForm( TextToObjectsFormType::class, [
                    'category' => $category,
                    ]);
    $form->handleRequest( $request );
    if( $form->isSubmitted() && $form->isValid() ) {
        $formData = $form->getData();
        $allTheStuff = textParserForStuff( $formData['objectText'] );
        $nextForm = $this->createForm( StuffConfirmationFormType::class, $allTheStuff );
        return $this->render( 'my_stuff/confirmation.html.twig', [
            'form' => $nextForm->createView(),
            'category' => $category,
        ] );
    }
    return $this->render( 'my_stuff/text.html.twig', [
            'form' => $form->createView(),
            'category' => $category,
    ] );
}

这样可以很好地显示确认表单,但是当我提交该表单时,我最终会显示原始的TextToObjects表单?

为了回答albert的问题,TextToObjectsFormType只有三个字段,一种设置生成对象组的日期和时间的方法,一种选择对象原点的方法和一种文本描述的文本区域。我没有设置data_class,所以我得到一个关联数组与提交的信息。

class TextToObjectsFormType extends AbstractType {
    public function buildForm( FormBuilderInterface $builder, array $options ) {
        $builder
        ->add( 'textSourceDateTime', DateTimeType::class, [
                    'widget' => 'single_text',
                    'invalid_message' => 'Not a valid date and time',
                    'attr' => [ 'placeholder' => 'mm/dd/yyyy hh:mm',
                                'class' => 'js-datetimepicker', ],
                    ])
        ->add( 'objectsOrigin', EntityType::class, [ 
                    'class' => ObjectSourcesClass::class,
                    ])
        ->add( 'objectText', TextareaType::class, [
                    'label' => 'Copy and paste object description text here',
                    ]);           
    }
}

如何将已确认的,可能已修订的对象恢复到数据库中?

谢谢。

forms symfony
1个回答
0
投票

使用您当前的架构$nextForm = $this->createForm( StuffConfirmationFormType::class, $allTheStuff );没有足够的信息。它应该包含action参数,以告知提交到post请求的路由。

在StuffConfirmationFormType中添加一个隐藏的“objectText”字段。

  • 创建一个confirmation_stuff路线
  • 为此路线创建操作
  • 在此操作中,如果表单有效=>保存您的东西ELSE重新渲染TextToObjectsFormType与链接到text_to_objects的动作

请注意,使用此技术不会阻止用户通过手动编辑隐藏字段来输入非功能数据。

希望这可以帮助

© www.soinside.com 2019 - 2024. All rights reserved.