访问 Symfony2 控制器中未映射的字段

Posted

技术标签:

【中文标题】访问 Symfony2 控制器中未映射的字段【英文标题】:Access an unmapped field in Symfony2 Controller 【发布时间】:2013-06-09 15:29:27 【问题描述】:

我正在创建带有未映射字段的表单,如 form documentation 中所述。

但是,当我想在控制器或类似设备中访问它时,目前我正在使用 POST 请求数组并像这样从那里退出:

$postData = $this->getRequest()->request->get('my_form_name');
$unmappedField = $postData['unmapped_field']

我只是忍不住想这不是最好的方法,而且我在官方文档上找不到任何东西。

还有比这更好的方法吗?

【问题讨论】:

对你的请求对象调用 get('unmapped_field') 怎么样? 这个未映射的字段是否包含在实体对象中,或者您的表单是否绑定到平面数组? 【参考方案1】:

您可以访问表单中未映射的字段

$unmappedField = $form['unmapped_field']->getData();

【讨论】:

是的,是的,但是如何在我创建动态未映射字段的情况下动态获取它 如果你有一个嵌套类型的表单,它会像$unmappedField = $form['subtype_name']['unmapped_field']->getData(); 您可以使用: $all = $form->all() ...然后遍历所有字段并针对每个字段: $field->getConfig()->getOptions()['mapped' ] ...然后您可以根据此选项决定要处理哪个字段...【参考方案2】:

取自 symfony doc sf 2.5(也用 sf 2.3 测试过):

表单类型:

use Symfony\Component\Form\FormBuilderInterface;

public function buildForm(FormBuilderInterface $builder, array $options)

    $builder
        ->add('task')
        ->add('dueDate', null, array('mapped' => false))


  ->add('save', 'submit');

控制器:

$form->get('dueDate')->getData();
$form->get('dueDate')->setData(new \DateTime());

http://symfony.com/doc/current/book/forms.html#creating-form-classes(向下滚动一点)

【讨论】:

我不知道getData 有一个setData 补码。正是我需要的,谢谢!

以上是关于访问 Symfony2 控制器中未映射的字段的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 将自定义字段添加到表单构建器

Symfony2 实体中除 id 以外的字段的关联在表单中未正确显示

从 symfony2 中的控制器添加字段特定错误

.m 文件中未访问 UITableViewCell 中的标签

Symfony2 生成带有选项的实体字段

Symfony2 - 添加控制器安全性以限制用户对特定博客的访问