【问题标题】:Symfony 2 : Get available choices of a choice Field TypeSymfony 2:获取选项字段类型的可用选项
【发布时间】:2013-07-03 17:01:11
【问题描述】:

1) 有 symfony 方法吗?

我有一个基本表单(未映射到数据库),带有一些选择字段,例如:

    $builder->add('civility', 'choice',  array('choices'=> array('m' => 'M.', 'mme' => 'Mme', 'mlle' => 'Mlle')))

我如何 - 在提交表单之后 - 在操作中(或者,更好的是,在模板中)检索选项的标签值而不是表单提交的值? (在这种情况下,我希望能够在模板中呈现“M.”而不是“m”

我在考虑类似$form->get("civility")->getChoiceLabel($form->get("civility")->getData())

但我在文档中没有找到类似的内容(尽管 Symfony1 中有类似的内容)。

2) 如果真的没有,最好的方法是什么?

因此,我正在考虑在表单使用的数据类中创建一些方法来做到这一点,例如 ..:

private $choices = array("civility" => array('m' => 'M.', 'mme' => 'Mme', 'mlle' => 'Mlle'));
static public function getChoiceLabel($choice_value, $field_name)
{
    return  self::$choices[$field_name][$choice_value];
}

static public function getChoices($field_name)
{
    return self::$choices[$field_name];
}

但问题是我们不应该在 twig 模板中使用静态方法(我必须将其设为静态才能在表单生成、buildForm 方法中使用它,而不是重复一些代码)。

【问题讨论】:

  • 当您打印$form['civility'] 时找不到您要查找的标签?尝试在 $form 上调用 createView 之前和之后打印该字段

标签: forms symfony choicefield


【解决方案1】:

您可以像这样访问选择的标签及其值:

$form->get('civility')->getConfig()->getOption('choices');

阅读更多:Symfony\Component\Form\FormConfigInterface::getOption()

【讨论】:

  • 完美,这正是我想要的!在文档中很难找到,即使在 API 中也是如此。你通常如何找到这样的东西?
  • 我的 IDE (phpstorm) 中的自动完成功能。我只是寻找该类的所有方法并找到了我需要的东西。当然,API 文档有时也会对我有所帮助。
猜你喜欢
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多