好的,这是一个例子。
我已经建立了一个测试项目。
现在我有一个
DatabaseInteractionType.php
类。
我在哪里?
->add(
'question',
TextType::class,
[
'attr' => [
'placeholder' => 'Enter your Question',
'class' => 'form-control'
],
'required' => true
]
)
question
取自我的称呼
DatabaseInteraction.php
现在,让我说我要用另一个实体中的另一个字段替换question
。
那是在哪里定义的?
询问的背景:我使用了make:form基于Enitity创建一个表单。但是现在我想知道在何处进行“连接”。
答案 0 :(得分:0)
主要是PropertyAccess魔法。如果您的表单中有一个字段question
(FormBuilder::add()
调用的第一个参数),它将用于查看给定的Entity或数组,如果它具有一个字段/属性/键,有一个相似的名字。在这种情况下,类似的含义是:(对于对象)称为getQuestion
的方法,称为isQuestion
或hasQuestion
的方法,称为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,
]);
}