0
我正在努力尋找一些聽起來很愚蠢的東西,但是:Symfony2監聽器類未加載?
我創建了一個偵聽器類,在實體持久化後向Lucene搜索索引添加內容。
我config.yml:
services:
searchindexer.listener:
class: ripr\WfBundle\Listener\SearchIndexer
tags:
- { name: doctrine.event_listener, event: postPersist }
我的文件在src/ripr/WfBundle /監聽
文件名是SearchIndexer.php
類名SearchIndexer
命名空間ripr \ WfBundle \ Listener
我收到一個錯誤s的線路
$index = $this->get('ivory_lucene_search')->getIndex('identifier1');
錯誤:
Fatal error: Call to a member function get() on a non-object
這聽起來對我來說,沒有加載類。我不明白我錯在哪裏。
我刷新dev緩存倍數倍。
當我在經典的控制器中調用它時,這條精確的線條完美地工作。
-------- --------編輯
我的類代碼,以幫助
<?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();
}
}
昨天我發現了一個糟糕的解決方案,讓我擺脫這個問題。 您的評論#1真的有助於展示正確的方式來做到這一點,#2教會了我對依賴注入的巨大興趣。謝謝 – Matthieu 2012-01-01 10:09:25