如何向 symfony 2 表单添加一些额外的数据
Posted
技术标签:
【中文标题】如何向 symfony 2 表单添加一些额外的数据【英文标题】:How to add some extra data to a symfony 2 form 【发布时间】:2012-12-22 18:59:08 【问题描述】:我的实体有一个名为Book
的表单,并且我有一个在我的视图中显示表单的类型。在这种类型中,我有一些字段映射到我的实体中的属性。
现在我想添加另一个未映射到我的实体中的字段,并在创建表单期间为该字段提供一些初始数据。
我的类型看起来像这样
// BookBundle\Type\Book
public function buildForm(FormBuilderInterface $builder, array $options = null)
$builder->add('title');
$builder->add('another_field', null, array(
'mapped' => false
));
表单是这样创建的
$book = $repository->find(1);
$form = $this->createForm(new BookType(), $book);
现在如何在表单创建过程中提供一些初始数据?或者我该如何更改表单的创建以将初始数据添加到 another_field
字段?
【问题讨论】:
您打算如何处理未映射到实体的字段? 我想从表单或请求中获取提交的数据并手动处理数据。 【参考方案1】:我还有一个表单,它的字段大多与先前定义的实体匹配,但其中一个表单字段已映射设置为 false。
要在控制器中解决这个问题,您可以很容易地给它一些初始数据,如下所示:
$product = new Product(); // or load with Doctrine/Propel
$initialData = "John Doe, this field is not actually mapped to Product";
$form = $this->createForm(new ProductType(), $product);
$form->get('nonMappedField')->setData($initialData);
就这么简单。然后,当您处理表单数据以准备保存时,您可以通过以下方式访问非映射数据:
$form->get('nonMappedField')->getData();
【讨论】:
有用提示:当您要填充的非映射字段是子表单本身时,您必须链接get()
调用:$form->get('nonMappedSubForm')->get('subFormField')->setData(...)
。
正在寻找如何从额外字段中检索数据。 $form->get('nonMappedField')->getData();谢谢【参考方案2】:
一个建议可能是在您的 BookType 上添加一个包含“another_field”数据的构造函数参数(或设置器),并在添加参数中设置“数据”参数:
class BookType
private $anotherFieldValue;
public function __construct($anotherFieldValue)
$this->anotherFieldValue = $anotherFieldValue;
public function buildForm(FormBuilderInterface $builder, array $options = null)
$builder->add('another_field', 'hidden', array(
'property_path' => false,
'data' => $this->anotherFieldValue
));
然后构造:
$this->createForm(new BookType('blahblah'), $book);
【讨论】:
感谢您的回答。我找到了另一种优雅的方法。将在一分钟内发布答案。【参考方案3】:您可以像这样更改请求参数以支持带有附加数据的表单:
$type = new BookType();
$data = $this->getRequest()->request->get($type->getName());
$data = array_merge($data, array(
'additional_field' => 'value'
));
$this->getRequest()->request->set($type->getName(), $data);
这样,您的表单将在呈现时为您的字段填写正确的值。如果您想提供许多字段,这可能是一个选项。
【讨论】:
以上是关于如何向 symfony 2 表单添加一些额外的数据的主要内容,如果未能解决你的问题,请参考以下文章