经过数小时的搜索,我无法看到自己做错了什么。我正在使用Symfony 3.1.6。
这是我的问题:
我有一个实体Customer,其属性country(整数)基于实体Country的id。我不想在这两个实体之间建立关系,因为我不想在每次另一个实体需要时在Country实体中添加属性(Users,Customers,Leads,...)。 / p>
我有一个我在CustomerType中嵌入的LocationType表单。
CountryType表单字段基于国家/地区的code2A,然后我将其作为Country实体中的属性。
在FormEvents :: PRE_SET_DATA中,我想使用Customer国家(一个整数)来搜索它的对应代码2a,以设置在呈现组合框时选择的正确CountryType选项。
这里是LocationType的代码:
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Form\Extension\Core\Type\CountryType;
class LocationType extends AbstractType
{
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$country_field = array(
'required' => false,
'placeholder' => 'Choose country',
'empty_data' => null,
'mapped' => true,
'attr' => array('v-model' => 'selected_country')
);
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($country_field) {
$form = $event->getForm();
$data = $event->getForm()->getParent()->getData();
$filtered_country_field = $country_field;
if (!empty($data->getCountry())) {
echo '<pre>('.$data->getCountry().')</pre><br />';
$repo = $this->em->getRepository('AppBundle:Country');
$country = $repo->find($data->getCountry());
echo '<pre>Country code 2a ('.$country->getCode2a().')</pre><br />';
//$filtered_country_field['attr']['data-selected'] = $data->getCountry()->getCode2a();
}else{
echo 'No country.<br />';
}
//echo '<pre>'; print_r ($filtered_country_field); echo '</pre>';
//exit;
$form->add('country', CountryType::class, $filtered_country_field);
}
);
}
}
但在执行时我有这个错误:
Type error: Argument 1 passed to AppBundle\Form\LocationType::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in C:\xampp\htdocs\test\vendor\symfony\symfony\src\Symfony\Component\Form\FormRegistry.php on line 85
但我看到的每个地方都用同样的方式来获得他们......
任何帮助都是有用的。