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总是将表单映射到实体。这正是您所需要的。