在Symfony中:我如何在其相关实体上嵌入形式,而不包括外国密钥字段(在提交中填充该字段)



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

关系:

  • 文章有一位作者。
  • 文章有许多评论。
  • 作者有许多文章。
  • 评论有一个作者。
  • 评论有一篇文章。

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

我正在尝试将作者,文章和评论实体的混合物嵌入文章的展示观点上。但是只有用户(作者)提供的输入。

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

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

注意,我们不应显示要查看文章的任何字段!我们应该能够在某个时候在幕后抓住它,并在代码中填充新评论的文章。

我已经为此努力了一段时间,我认为它必须通过形式和事件做些事情?这是我在这里(不远...)

在这次尝试中,我正在考虑仅仅让字段自动填充,然后使用隐藏的字段。...我宁愿不这样做。我不喜欢让人们有机会操纵aprent_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 (SymfonyComponentFormFormEvent $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,其中管理表单提交和持久性。我认为这不是形式事件的问题。

最新更新