【问题标题】:Symfony 2: get languages (service) in FormTypeSymfony 2:在 FormType 中获取语言(服务)
【发布时间】:2013-11-22 10:29:42
【问题描述】:

似乎最简单的事情在 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')
          ;

【问题讨论】:

    标签: symfony service containers


    【解决方案1】:

    您可以将表单类型实现为服务,而不是这样做:

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

    这样做:

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

    然后只需定义您的服务以接收EntityManager 作为参数即可。快!您可以从您的表单类型中访问EntityManager

    另一种解决方案:

    我已经回答了类似的问题,虽然有点复杂SO 问题here

    【讨论】:

    • 但是我不想改变控制器中的东西,因为这些来自 AdminBundle(这意味着我必须用这个 $form = $this->createForm('my .custom_form_type');...
    • 如果这不可能......我不敢相信......但是用 symfony 2 就不行了......
    • $builder ->add('commentI18ns', 'propel1_translation_collection', array('languages' => LanguagePeer::getCultures(), 'label' => '',
    猜你喜欢
    • 2017-06-25
    • 1970-01-01
    • 2019-11-30
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多