PRE_SET_DATA中的Symfony 3 EntityManager

时间:2016-11-11 13:16:49

标签: symfony

经过数小时的搜索,我无法看到自己做错了什么。我正在使用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 

但我看到的每个地方都用同样的方式来获得他们......

任何帮助都是有用的。

0 个答案:

没有答案