将实体传递给 FormType,因此它的方法可以是 运行 in buildForm() in Symfony2

Passing an Entity to a FormType so its methods can be run in buildForm() in Symfony2

开始使用 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 与用于构建表单的类型 class 联系起来。

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);

然后,您的 FormViewtitle 字段将直接填充 "HELLO"