繁体   English   中英

在Symfony中:如何在不包含外键字段的情况下在其相关实体上嵌入表单(在提交时填充该字段)?

[英]In Symfony: How do I embed a form on its related entity, without including foreign key field (populate that on submission)?

我有3个实体:文章,作者,Reivews:

关系:

  • 文章只有一位作者。
  • 文章有很多评论。
  • 作者有很多文章。
  • 评论有一位作者。
  • 评论有一篇文章。

作者创建文章和评论。 他们是应用程序的用户。

我试图将“作者”,“文章”和“审阅实体”混合使用在文章的“ SHOW”视图中。 但是只有用户(作者)将提供输入。

用例示例:用户(作者)在文章的SHOW视图上。 提示他留下评论,并且该表单包含以下字段:

  • 评分(评论实体)
  • 评论标题(评论实体)
  • 名称(作者实体)
  • 电子邮件(作者实体)

请注意,我们不应显示要求查看文章的任何字段! 我们应该能够在某个时候将其隐藏起来,并在代码中填充新的Review的article_id。

我已经为此工作了一段时间,我认为它必须对表单和事件做些什么? 这就是我的位置(不远处...)

在此尝试中,我正在考虑仅使字段自动填充,然后使用隐藏的字段...。我将不这样做。 我不喜欢给人们机会去操纵article_id

class ReviewType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder->add('review')->add('title');

        //$builder->add('article', HiddenType::class);

        $builder->add('author', AuthorType::class, array("label" => FALSE));

        $builder->add('rating', ChoiceType::class, array(
            'choices' => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' =>'5'),
            'expanded' => true,
            'multiple' => false
        ));

        $builder->addEventListener(
            FormEvents::PRE_SET_DATA,
            function (\Symfony\Component\Form\FormEvent $event) {
                $form = $event->getForm();
                $data = $event->getData();

                $article = $data->getArticle();
                $articleId = null === $article ? array() : $article->getId();
                $form->add('article', ArticleType::class, array("label" => FALSE));

            }
        );

    }

在此先感谢您可以提供任何输入!!!

您应该将在article/{id}/show生成并显示的表单操作更改为article/{id}/review ,然后在管理表单提交和持久性的相应操作中获取文章ID。 我认为这与形式事件无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM