Symfony 2:在FormType中获取语言(服务)

时间:2013-11-22 10:29:43

标签: symfony service containers

似乎在Symfony 2中很难做到最简单的事情;

像这样:

我有一项服务,它返回文化:

public function getCultures()
{
   $langs = LanguageQuery::create()->orderByPosition()->find();
   $cultures = array();
   foreach ($langs as $lang) {
     $cultures[] = $lang->getCulture();
   }
   return $cultures;
}

我想在我的FormType中访问它:

现在..我无法在这里获取数据..(无法调用服务容器)..

而且我不想将$ CULTURES作为FormType的参数,(这意味着我必须覆盖每个控制器中的每个函数)..(这不太实用..)...所以有人有一个好的解决方案或者Symfony 1.4对于这个简单的事情更好..

   $builder
        ->add('commentI18ns', 'propel1_translation_collection', array(
            'languages' => array($CULTURES),
            'label' => '',
            'options' => array(
              'columns' => array(
                'name' => array('label' => 'Name'),
                'description' => array(
                'label' => 'Description', 
                'type' => 'textarea',
                )
              ),
              'data_class' => 'MyDataClass'
            )
          ))
          ->add('is_active')
          ;

1 个答案:

答案 0 :(得分:1)

您可以将表单类型实现为服务并执行以下操作:

$form = $this->createForm(new MyFormType(),...);

这样做:

$form = $this->createForm('my.custom_form_type'); // service id

然后,定义您的服务以接收EntityManager作为参数。普雷斯托!您可以在表单类型中访问EntityManager

另一种解决方案:

我已经回答了类似但有点复杂SO问题 here