Я борюсь с чем-то, что может звучать глупо, но:
Я создал класс слушателя, который добавляет контент в поисковый индекс Lucene после сохранения сущности.
Мой config.yml:
services:
searchindexer.listener:
class: ripr\WfBundle\Listener\SearchIndexer
tags:
- { name: doctrine.event_listener, event: postPersist }
Мой файл находится в src / ripr / WfBundle / Listener
Имя файла - SearchIndexer.php
Имя класса - SearchIndexer
Пространство имен ripr \ WfBundle \ Listener
Я получаю сообщение об ошибке в этой строке
$index = $this->get('ivory_lucene_search')->getIndex('identifier1');
ошибка:
Fatal error: Call to a member function get() on a non-object
Мне кажется, что класс не загружен. Я не могу понять, где я не прав.
Я сбрасываю кэш Dev, кратный раз.
Эта точная линия отлично работает, когда я называю ее внутри классического контроллера.
-------- Edited --------
Мой код класса, чтобы помочь
<?php
namespace ripr\WfBundle\Listener;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Doctrine\ORM\Event\LifecycleEventArgs;
use ripr\WfBundle\Entity\Item;
use Ivory\LuceneSearchBundle\Model\Document;
use Ivory\LuceneSearchBundle\Model\Field;
/**
* Search indexer.
*
*
*/
class SearchIndexer extends Controller
{
/**
* Index content
*
*/
public function postPersist (LifeCycleEventArgs $args) {
// $luceneSearch = $this->get('ivory_lucene_search');
// $luceneSearch->eraseIndex('identifier1');
$entity = $args->getEntity();
$entityManager = $args->getEntityManager();
// perhaps you only want to act on some "Product" entity
$index = $this->get('ivory_lucene_search')->getIndex('identifier1');
$document = new Document();
$document->addField(Field::text('titre', 'bille'));
$document->addField(Field::text('texte', 'billou'));
// Add your document to the index
$index->addDocument($document);
$index->commit();
}
}