Symfony2 образуют динамическую популяцию

У меня есть сущность, которая описывает школу и связана с другой сущностью, которая описывает "Стадию" с ассоциацией 1 школа -> много Стадий.

Школа имеет следующие поля (я перечислю только соответствующие поля / методы):

namespace A4U\DataBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

class StuAnagScuole
{
    .
    .
    .

    private $citta;

    private $provincia;

    private $regione;

    /**
      * @ORM\OneToMany(targetEntity="A4U\FormBundle\Entity\Stage", mappedBy="attendedSchool")
    */
    protected $stages;

    public function __construct()
    {
        $this->stages = new ArrayCollection();
    }

    .
    .
    .
}

в то время как сущность Stage выглядит следующим образом:

namespace A4U\FormBundle\Entity;
class Stage
{
    .
    .
    .
    /**
     * @ORM\ManyToOne(targetEntity="A4U\DataBundle\Entity\StuAnagScuole", inversedBy="stages")
     * @ORM\JoinColumn(name="attendedSchool_id", referencedColumnName="idRecord")
     */
    protected $attendedSchool;
    .
    .
    .
}

Я создал форму, которая позволяет пользователю зарегистрироваться на сцене. В какой-то момент пользователь должен войти в школу, которую он посещал, из списка школ, сохраненных в базе данных.

Поскольку существует более 7000 школ, я должен отфильтровать их:

1) Сначала пользователь выбирает регион

2) Затем он выбирает район

3) Тогда Город

4) И наконец школа

Так что я подумал добавить поле сущности для каждого из "фильтров" (первый такой):

->add('attendedSchoolRegion', 'entity', array(
    /*
        usando mapped false si dice a simfony che il campo non deve essere scritto
        nell'entità
    */
    'mapped' => false,
    'label' => 'Regione della scuola*',
    'class' => 'A4UDataBundle:StuAnagScuole',
    'query_builder' => function(EntityRepository $er) {
        return $er->getRegioni();
        },
    'property' => 'regione',
    'attr' => array(
        'class' => 'form-control',
        'placeholder' => 'Campo di studi'
        )
    ))

В хранилище сущностей:

/**
 * Get Regioni
 *
 * @return array 
 */
public function getRegioni()
{
    $qb = $this->getEntityManager()->createQueryBuilder();

    $qb->select('s0')
    ->from('A4UDataBundle:StuAnagScuole', 's0')
    ->groupBy('s0.regione');

    return $qb;
}

Итак, на данный момент я подумал добавить событие POST_SUBMIT в поле "ParticipSchoolRegion", чтобы динамически заполнить "ParticipSchoolDistrict" следующим образом:

    $addDistrict = function (FormInterface $form, StuAnagScuole $attendedSchoolRegion)
    {
        //$districts = $attendedSchoolRegion->getProvincie($attendedSchoolRegion);

            $form->add('attendedSchoolDistrict', 'entity', array(
            'mapped' => false,
            'label' => 'Provincia della scuola di provenienza*',
            'class' => 'A4UDataBundle:StuAnagScuole',
            'query_builder' => function(EntityRepository $er) {
                return $er->getProvincie($attendedSchoolRegion);
                },
            'property' => 'provincia',
            'attr' => array(
                'class' => 'form-control',
                )
            ));

    };

    $builder->get('attendedSchoolRegion')->addEventListener(
        FormEvents::POST_SUBMIT,
        function (FormEvent $event) use ($addDistrict){
            $attendedSchoolRegion = $event->getForm()->getData();
            $addDistrict($event->getForm()->getParent(), $attendedSchoolRegion);
        }
    );

И так до тех пор, пока школа не будет выбрана. В конце процесса я хочу, чтобы только идентификатор выбранной школы был сохранен в БД под полем "Школа".

Но мне кажется, что я не могу передать значение из выбранного региона в метод "getProvincie".

вот ошибка:

Catchable Fatal Error: Argument 2 passed to A4U\FormBundle\Form\Type\StageType::A4U\FormBundle\Form\Type\{closure}() must be an instance of A4U\DataBundle\Entity\StuAnagScuole, none given...

Я надеюсь, что я достаточно ясно, спасибо за помощь.

0 ответов

Другие вопросы по тегам