开始使用Symfony框架,到目前为止一切顺利,但以下让我感到难过。
我需要提取以前持久化的数据,以预先填充多页表单另一个阶段的某些字段。
我曾希望只是传入对象以使用它的方法,但我似乎无法让它工作。
例如:
foo.php
...
$form = $this->formFactory->create('foo_type', $article);
...
fooType.php
...
protected $article;
public function __construct(Article $article)
{
$this->article = $article;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'fooTitle',
'text',
array('data' => $this->article->getTitle())
);
}
...
forms.xml
<service id="footType" class="\Path\To\File\fooType">
<argument type="service" id="article" />
<tag name="form.type" alias="foo_type" />
</service>
我觉得我错过了某个关键步骤,但我很难理解如何将xml与用于构建表单的类型相关联。
答案 0 :(得分:1)
FormBuilder
不应该操纵实体数据,因为正如其名称所示,其作用是构建Form
的不同字段。
关于填充字段,实际上非常简单:如果您在实体上设置属性,将实体绑定到Form
时,相关字段(即与您的属性同名的字段)将充分改变其数据。
示例:
<强> FooType.php 强>
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', 'text');
}
<强> Foo.php 强>
$article->setTitle('HELLO');
$this->formFactory->create('foo_type', $article);
然后,您的FormView
会直接将title
字段填充"HELLO"
。