나는 바보처럼 들릴지도 모르는 뭔가로 고민하고있다. 그러나Symfony2 리스너 클래스가로드되지 않습니까?
엔티티가 지속 된 후에 Lucene Search Index에 내용을 추가하는 수신기 클래스를 만들었다.
내 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();
}
}
나는이 문제를 해결하기 위해 어제 진절머리가 나는 해결책을 발견했습니다. 귀하의 의견은 올바른 방법을 보여주기에 정말 도움이되며 # 2는 의존성 주입에 대한 엄청난 관심을 가르쳐줍니다. 감사 – Matthieu