好的,这是一个例子。
我已经建立了一个测试项目。现在我有一个DatabaseInteractionType.php
类。
我有这个领域的地方。
->add(
'question',
TextType::class,
[
'attr' => [
'placeholder' => 'Enter your Question',
'class' => 'form-control'
],
'required' => true
]
)
qazxsw poi取自我的实体,名为qazxsw poi
现在假设我想用另一个实体的另一个字段替换question
。 thate定义在哪里?
问的背景:我使用make:form来创建基于Entity的表单。但现在我想知道“连接”的位置。
data_class选项是获取表单类名称的方法。
data_class选项通过将以下内容添加到表单类型类
像那样:
DatabaseInteraction.php
它主要是question
魔术。如果你的表单中有一个字段// src/Form/TaskType.php
use App\Entity\Task;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Task::class,
]);
}
(PropertyAccess调用的第一个参数),它将用于查看给定的Entity或数组,如果它有一个具有相似名称的字段/属性/键。在此上下文中类似的意思是:(对于对象)一种名为question
的方法,一种名为FormBuilder::add()
或getQuestion
的方法,一种名为isQuestion
的属性或方法,如果该对象具有定义的魔法hasQuestion
或question
,它也将使用它。 (所有这些当然只有,如果是公开的)。这些 - 我相信 - 大多数用于以某种方式解决属性访问的选项。 (详情可在该段开头提供的__get
上找到。)
现在,表单类型都有一个选项__call
,您可以使用它来设置要查找的不同属性(您甚至可以进入深度,有关详细信息,请参阅link)。
因此,使用Symfony的PropertyAccess组件从Symfony的Form组件中创建“连接”。另一方面,property_path
cli命令使用PropertyAccess查找所选实体上可访问的字段。