在bootstrap中设置静态方法的默认值

时间:2011-04-25 06:03:47

标签: zend-framework static lucene bootstrapping

这一段是“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;
}

1 个答案:

答案 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