Установить значение по умолчанию для статического метода в начальной загрузке - PullRequest
2 голосов
/ 25 апреля 2011

этот абзац является частью книги «Zend Framework In Action».

SearchIndexer::setIndexDirectory(ROOT_DIR . '/var/search_index');
Places_Db_Table_Row_Observable::attachObserver('SearchIndexer');

Как видите, это просто случай установки каталога для хранения файлов индекса поиска и присоединенияКласс к списку наблюдателей в Places_Db_Table_Row_Observable с использованием имени класса.

Теперь у меня проблема!Я поместил этот код в файл начальной загрузки в методе runapp, но он не может распознать каталог, который я установил в начальной загрузке!

Он показывает эту ошибку

An error occurred exception 'Zend_Search_Exception' with message 'No index directory specified' in E:\xampp\php\PEAR\Zend\Search\Lucene.php:497

=======================================================

другой тип моего вопроса:

У меня есть этот код в файле начальной загрузки (метод runApp):

SearchIndexer::setIndexDirectory(ROOT_DIR.'/var/search_index');  
Places_Db_Table_Row_Observable::attachObserver('SearchIndexer'); 

Я задаю путь к каталогу поискав классе SearchIndexer, но есть проблема!

Когда я использую приведенный ниже код в действии контроллера, он не может распознать каталог, который я установил в начальной загрузке!

код контроллера:

$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 Ответ

1 голос
/ 28 апреля 2011

Ваша 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

...