コード例 #1
0
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('added', 'oro_entity_identifier', ['class' => $options['class'], 'multiple' => true])->add('removed', 'oro_entity_identifier', ['class' => $options['class'], 'multiple' => true]);
     if ($options['extend']) {
         $em = $this->entityManager;
         $class = $options['class'];
         $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use($em, $class) {
             $data = $event->getData();
             $repository = $em->getRepository($class);
             $targetData = $event->getForm()->getParent()->getData();
             $fieldName = $event->getForm()->getName();
             if (!empty($data['added'])) {
                 foreach (explode(',', $data['added']) as $id) {
                     $entity = $repository->find($id);
                     if ($entity) {
                         FieldAccessor::addValue($targetData, $fieldName, $entity);
                     }
                 }
             }
             if (!empty($data['removed'])) {
                 foreach (explode(',', $data['removed']) as $id) {
                     $entity = $repository->find($id);
                     if ($entity) {
                         FieldAccessor::removeValue($targetData, $fieldName, $entity);
                     }
                 }
             }
         });
     }
 }
コード例 #2
0
 public function testAddAndRemoveValue()
 {
     $entity = new FieldAccessorTestEntity();
     $this->assertCount(0, $entity->getRelatedEntities());
     $this->assertCount(0, $entity->getAnotherRelatedEntities());
     $relatedEntity1 = new DemoEntity(1);
     $relatedEntity2 = new DemoEntity(2);
     FieldAccessor::addValue($entity, 'related_entity', $relatedEntity1);
     FieldAccessor::addValue($entity, 'anotherRelatedEntity', $relatedEntity2);
     $this->assertCount(1, $entity->getRelatedEntities());
     $this->assertSame($relatedEntity1, $entity->getRelatedEntities()->first());
     $this->assertCount(1, $entity->getAnotherRelatedEntities());
     $this->assertSame($relatedEntity2, $entity->getAnotherRelatedEntities()->first());
     FieldAccessor::removeValue($entity, 'related_entity', $relatedEntity1);
     FieldAccessor::removeValue($entity, 'anotherRelatedEntity', $relatedEntity2);
     $this->assertCount(0, $entity->getRelatedEntities());
     $this->assertCount(0, $entity->getAnotherRelatedEntities());
 }