这一段是“Zend Framework In Action”一书的一部分。
SearchIndexer::setIndexDirectory(ROOT_DIR . '/var/search_index');
Places_Db_Table_Row_Observable::attachObserver('SearchIndexer');
如您所见,这只是设置目录以存储搜索索引文件的情况 并将该类附加到Places_Db_Table_Row_Observable中的观察者列表 使用班级名称。
现在我有问题了!我把这段代码放在runapp方法的bootstrap文件中,但它无法识别我在bootstrap中设置的目录!
它显示了我的错误
An error occurred exception 'Zend_Search_Exception' with message 'No index directory specified' in E:\xampp\php\PEAR\Zend\Search\Lucene.php:497
=============================================== ======
其他类型的问题:
我在bootstrap文件(runApp方法)中有这段代码:
SearchIndexer::setIndexDirectory(ROOT_DIR.'/var/search_index');
Places_Db_Table_Row_Observable::attachObserver('SearchIndexer');
我在SearchIndexer类中设置了搜索目录路径,但是有一个概率!
当我在控制器操作中使用下面的代码时,它无法识别我在bootstrap中设置的目录!
控制器代码:
$index = Places_Search_Lucene::open(SearchIndexer::getIndexDirectory());
这是seachIndexer代码:
public static function setIndexDirectory($directory){
if(!is_dir($directory)) {
throw new Exception('Directory for SearchIndexer is invalid ('. $directory .')');
}
self::$_indexDirectory = $directory;
}
public static function getIndexDirectory(){
return self::$_indexDirectory;
}
答案 0 :(得分:1)
您的getIndexDirectory
函数未返回路径,因此Places_Search_Lucene::open
失败。
可能setIndexDirectory
无法设置路径。在那上做一些调试。
在zend自动加载器加载之前,你可能会在引导程序中使用该类。你在哪里做这个?
尝试在使用前手动加载类:
Zend_Loader::loadClass('Path_To_SearchIndexer',
array(
'/home/production/mylib',
)
);
关于zend loader的文档:http://framework.zend.com/manual/en/zend.loader.load.html