2015-12-21 3 views
0

Почему у меня пустой вложенный объект? У меня есть талант индекса. В базе данных талант имеет вложенный пользователь и когда теперь, когда я обновляю или создаю талант, он не будет обновляться как вложенный объект в ElasticSearch, и я не понимаю, почему?FOSElasticaBundle Update Вложенный объект

fos_elastica: 
clients: 
    default: 
     host: %elastica_host% 
     port: %elastica_port% 
     headers: { Authorization: Basic %elastica_auth_header% } 

indexes: 
    profile: 
     finder: ~ 
     types: 
      talent: 
       mappings: 
        id: 
         type: integer 
        slug: 
         type: string 
        description: 
         type: string 
        user: 
         type: "nested" 
         properties: 
          id: ~ 
          username: 
           type: string 

я искать и находить о коррекции Listener postPersist, postUpdate и preRemove

fos_elastica.listener.talent: 
    class: Artel\SiteBundle\EventListener\ElasticaCourseListener 
    arguments: 
     - @fos_elastica.object_persister.user.user 
     - ['postPersist', 'postUpdate', 'preRemove'] 
     - @fos_elastica.indexable 
    calls: 
     - [ setContainer, ['@service_container', @fos_elastica.object_persister.profile.talent ] ] 
    tags: 
     - { name: 'doctrine.event_subscriber' } 

Мой собственный слушатель Artel\SiteBundle\EventListener\ElasticaCourseListener будет выглядеть следующим образом:

<?php 

    namespace Artel\SiteBundle\EventListener; 

    use Doctrine\Common\EventArgs; 
    use FOS\ElasticaBundle\Doctrine\Listener as BaseListener; 
    use FOS\ElasticaBundle\Persister\ObjectPersister; 
    use Symfony\Component\DependencyInjection\ContainerInterface; 
    use Artel\ProfileBundle\Entity\Developer; 

    class ElasticaCourseListener extends BaseListener 
    { 
     private $container; 
     private $objectPersisterSession; 

     public function setContainer(ContainerInterface $container, ObjectPersister $objectPersisterSession) 
     { 
      $this->container = $container; 
      $this->objectPersisterSession = $objectPersisterSession; 
     } 

     public function postUpdate(EventArgs $args) 
     { 
      $entity = $args->getEntity(); 

      if ($entity instanceof Developer) { 
       $this->scheduledForUpdate[] = $entity; 
       foreach ($entity->getUser() as $session) { 
        $this->objectPersisterSession->replaceOne($session); 
       } 
      } 
     } 
    } 

Теперь у меня есть ошибка

[Symfony \ Component \ Debug \ Exception \ ContextErrorException]
выполнение Примечание: Декларация Артели \ SiteBundle \ EventListener \ ElasticaCourseListener :: postUpdate() должен быть совместим с FOS \ ElasticaBundle \ Doctrine \ Слушатель :: postUpdate (Doctrine \ Common \ Постоянство \ Event \ LifecycleEventArgs $ EventArgs)

Помогите пожалуйста

ответ

0

Вы должны использовать это:

use Doctrine\Common\Persistence\Event\LifecycleEventArgs; 

Забудьте, что один:

use Doctrine\Common\EventArgs; 

Есть некоторые обновления в Учении;)

Смежные вопросы