【问题标题】:Symfony 4 Embed Forms - Embed Part OnlySymfony 4 嵌入表单 - 仅嵌入部分
【发布时间】:2019-11-28 06:29:22
【问题描述】:

我有 2 个实体:文章、评论

每个都有自己的 FormType -> ArticleType, CommentType


要创建文章,我只是使用 ArticleType 创建一个表单。

对于评论,我使用我的 CommentType,但我还想修改文章中的一些信息。

例如:添加评论并能够更改文章类别。

这意味着我需要将 Article-Category 字段添加到我的 CommentType。既然有办法嵌入来完成表格。我想知道我是否只能嵌入表单的一部分。

文章类型:

$builder->add('headline', TextType::class, [ ... ])
        ->add('text', TextType::class, [ ... ])
        ->add('category', EntityType:class, [ ... ])

评论类型:

$builder->add('article', ArticleType::class, [ ... ])
//adds all fields of ArticleType, but only want the category field

有什么方法可以解决这个问题,而不必从我的 ArticleType 添加类别部分? (防止重复代码)。

我还想知道控制器在我的情况下会是什么样子。 现在我使用以下代码,可能需要改进:

/**
 * @Route("/article/{id}", name="app_article")
 */
public function article(Request $request, Article $article)
{
    $comment = new Comment();
    $comment->setArticle($article); //to modify current article values

    $form = $this->createForm(CommentType::class, $comment);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $tmpArticle = $comment->getArticle(); //if I don't get the article from my comment, doctrine/symfony creates a *new* Article - which I dont want
        $article->setCategory($tmpArticle->getCategory());

        $em->persist($comment);
        $em->persist($article);
        $em->flush();

        return $this->redirectToRoute(...);
    }

    return $this->render(...);
}

谢谢。

【问题讨论】:

    标签: forms symfony controller embed


    【解决方案1】:

    如果您想为类别选择现有文章。 您是否应该使用 EntityType :Link

    使用参数,您可以在选择中选择标签。

    【讨论】:

    • 这就是我现在所做的。遗憾的是我不喜欢这个解决方案,因为我还使用 FormEvents 来动态更改表单。如果我使用 EntityType,我需要重写我实际上已经拥有的所有 FormEvents。示例:如果我选择一个类别,我会得到一个带有子类别的选择。这就是我想使用我的 ArticleType 的原因,所以我(如果可能的话)不需要复制所有内容 :)
    • 也许我的想法很愚蠢。如果你写:$builder->add('article.category', EntityType:class, [ ... ])
    • 点 [.] 在此上下文中是非法字符 =) 名称应以字母、数字或下划线开头,并且只能包含字母、数字、数字、下划线 ("_")、连字符 ("- ") 和冒号 (":")。
    【解决方案2】:

    解决方案:我将 ArticleType 更改为默认使用所有字段,但是当我使用特定选项时,它只使用我需要的几个字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 2017-08-04
      • 2014-03-08
      相关资源
      最近更新 更多