smyfony如何从表单中知道要使用哪个实体

时间:2019-04-13 17:47:02

标签: symfony

好的,这是一个例子。

我已经建立了一个测试项目。 现在我有一个 DatabaseInteractionType.php类。

我在哪里?

           ->add(
                'question',
                TextType::class,
                [
                    'attr' => [
                        'placeholder' => 'Enter your Question',
                        'class' => 'form-control'
                    ],
                    'required' => true
                ]
            )

question取自我的称呼 DatabaseInteraction.php

现在,让我说我要用另一个实体中的另一个字段替换question。 那是在哪里定义的?

询问的背景:我使用了make:form基于Enitity创建一个表单。但是现在我想知道在何处进行“连接”。

2 个答案:

答案 0 :(得分:0)

主要是PropertyAccess魔法。如果您的表单中有一个字段questionFormBuilder::add()调用的第一个参数),它将用于查看给定的Entity或数组,如果它具有一个字段/属性/键,有一个相似的名字。在这种情况下,类似的含义是:(对于对象)称为getQuestion的方法,称为isQuestionhasQuestion的方法,称为question的属性或方法(如果对象具有)神奇的__get__call定义,它也会使用它。 (当然,所有这些都是公开的)。我相信,这些是用于以某种方式解决属性访问的大多数选项。 (有关详细信息,请参见本段开头提供的link。)

现在,所有表单类型都有一个选项property_path,您可以使用该选项设置要查找的其他属性(您甚至可以进入更深的位置,有关更多详细信息,另请参见PropertyAccess

因此,使用Symfony的PropertyAccess组件从Symfony的Form组件进行“连接”。另一方面,make:form cli命令使用reflection查找所选实体上可访问的字段。

答案 1 :(得分:0)

data_class选项是在表单中获取类名称的方法。

  通过将以下内容添加到表单类型class中来

data_class选项

那样:

// src/Form/TaskType.php
use App\Entity\Task;
use Symfony\Component\OptionsResolver\OptionsResolver;

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