在FormBuilderInterface类中加载服务

时间:2016-01-20 16:35:15

标签: symfony

我有一个symfony服务,它从我的数据库中加载可用语言列表。

我有一个FormBuilderInterface类,我在其中定义了表单结构:

<?php

namespace UserBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

use Symfony\Component\Form\Extension\Core\Type\ChoiceType;

class UserProfileType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // $this->get('locations')->getCountries()

        echo 'options<pre>';
        print_r($options);
        echo '</pre>';

        $builder
            ->add('name')
            ->add('surname')
            ->add('birthdate')
            ->add('country', 'choice', 
                array(
                    'choices'  => $listOfCountries, // i want this !!
                    'choices_as_values' => true
                )
            )
            ->add('province')
            ->add('city')
            ->add('occupation')
            ->add('interests')
            ->add('languages')
            ->add('aboutMe')
        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'UserBundle\Entity\UserProfile'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'userbundle_userprofile';
    }
}

我尝试在我的FormBuilderInterface中加载我的Locations服务:

$这 - &GT;获得(&#39;位置);

但它不起作用。

我在互联网上搜索但我还没有发现任何相关信息。

我怎么做?

谢谢!

1 个答案:

答案 0 :(得分:2)

您不应该尝试在formType中调用服务。通过控制器注入所需内容。

控制器(注意第3个参数)

$form = $this->createForm( new UserProfileType(), $entity, array('locations' => $locations ) );

然后在您的formType类

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $listOfCountries = $options['locations']

    // ......
}

/*
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'UserBundle\Entity\UserProfile',
        'locations' => array()
    ));
}