Php Symfony为已创建为formtype的表单设置值

Php Symfony为已创建为formtype的表单设置值,php,forms,symfony,Php,Forms,Symfony,我创建了一个如下所示的表单类型 /** * Class CreatePosFormType. */ class CreatePosFormType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('name', TextType::class, [ 'req

我创建了一个如下所示的表单类型

/**
 * Class CreatePosFormType.
 */
class CreatePosFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name', TextType::class, [
            'required' => true,
            'constraints' => [new NotBlank()],
        ]);
        $builder->add('identifier', TextType::class, [
            'required' => true,
            'constraints' => [new NotBlank()],
        ]);
        $builder->add('description', TextType::class, [
            'required' => false,
        ]);
        $location = $builder->create('location', LocationFormType::class, [
            'constraints' => [new NotBlank(), new Valid()],
        ]);
        $location->addModelTransformer(new LocationDataTransformer());
        $builder->add($location);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Pos::class,
        ]);
    }
}
在我的控制器中,我已获得表格,并将请求发送至以下表格:

$form = $this->get('form.factory')->createNamed('pos', CreatePosFormType::class);
$form->handleRequest($request);
但是我需要从请求中获取数据并设置值,而不是将请求发送到表单,我已尝试如下所示:

$form->get('name')->setData('john')

但它并没有设置表单字段的值

如果我将值设置为form by以上,则会发生以下错误

{ “表格”:{ “儿童”:{ “名称”:{}, “标识符”:{}, “说明”:{}, “地点”:{}, } }, “错误”:[]}


您可以将映射类发送到表单本身。像这样:

public function createPost(Request $request)
{
    $pos = new Pos();
    $pos->setName('John');
    $form = $this->get('form.factory')->createNamed('pos', CreatePosFormType::class, $pos);

}
public function createPost(Request $request)
{
    $form = $this->get('form.factory')->createNamed('pos', CreatePosFormType::class, null, ['yourVariable' => $yourVariable]);

}
您还可以通过选项发送数据。像这样:

public function createPost(Request $request)
{
    $pos = new Pos();
    $pos->setName('John');
    $form = $this->get('form.factory')->createNamed('pos', CreatePosFormType::class, $pos);

}
public function createPost(Request $request)
{
    $form = $this->get('form.factory')->createNamed('pos', CreatePosFormType::class, null, ['yourVariable' => $yourVariable]);

}
在form类中,您可以在选项中捕捉到这一点

 class CreatePosFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
         $yourVariable = $options['yourVariable'];
         //do stuff with your variable
     }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Pos::class,
            'yourVariable' => null,
        ]);
    }

看看这个什么Symfony版本?我使用的是Symfony 3.2,但是我的Pos类在表单中没有一些变量。它使用事件将其存储在数据库中编辑我的答案以包含另一个选项。“{”表单“{”子项“{”名字“{}”,姓氏“{}”,活动“{}”,电子邮件“{}”,电话“{}”,密码“{}”,错误“{}”我在下面得到了一条关于如何在depth中调试的消息,这是一种不同于原来的形式。这包括非原始形式的“名字”等。这是另一个错误,可能是因为您的实体链接到表单。”data_class'=>Pos::class总是将表单映射到实体。这正是您所需要的。