我有一个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;位置);
但它不起作用。
我在互联网上搜索但我还没有发现任何相关信息。
我怎么做?
谢谢!
答案 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()
));
}