コード例 #1
0
 /**
  * {@inheritdoc}
  */
 public function reverseTransform($value)
 {
     if (is_string($value)) {
         return $this->tagRepository->resolveWithString($value, $this->delimiter);
     }
     return $value;
 }
コード例 #2
0
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->addModelTransformer(new TaggingTransformer($this->tagRepository, $options['delimiter']));
     $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use($options) {
         $tags = $event->getData();
         $event->setData(is_array($tags) ? implode($options['delimiter'], $tags) : $tags);
     });
     // TODO: BUG FIXME not work when object have no id (none persited object)
     $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
         $object = $event->getForm()->getParent()->getData();
         if (!$object instanceof TagsAwareInterface || !$object instanceof OriginContextInterface) {
             return;
         }
         $tags = $this->tagRepository->resolveWithString($event->getData()) ?: array();
         $object->setTags(null);
         /** @var TaggingInterface[] $oldTaggings */
         $oldTaggings = $this->taggingRepository->findBy(array('originAlias' => $object->getOriginalAlias(), 'originId' => $object->getId()));
         foreach ($oldTaggings as $oldTagging) {
             if (!in_array($oldTagging->getTag(), $tags)) {
                 $this->taggingRepository->getManager()->remove($oldTagging);
             }
         }
         $this->taggingRepository->getManager()->flush();
         foreach ($tags as $tag) {
             $tagging = $this->taggingRepository->findWithTagAndAlias($tag, $object, true);
             $this->originator->setOrigin($tagging, $object);
             $this->taggingRepository->add($tagging);
             $object->addTag($tag);
         }
     });
 }