#php #zend-framework
#php #zend-framework
Вопрос:
У меня есть приложение Zend Framework, запущенное на локальном веб-сервере. Я столкнулся с проблемой, когда он отображает код для определенных классов. Похоже, автозагрузчик не работает. Всякий раз, когда он пытается использовать класс, который должен был быть загружен автоматически, он вылетает, сообщая, что не может найти класс, и печатает содержимое файла php, содержащего класс, который он искал.
Вот мой автозагрузчик
protected function _initAutoload()
{
echo "in autoload";
// Set up autoload.
$obj_loader = Zend_Loader_Autoloader::getInstance();
$obj_loader->setFallbackAutoloader(true);
$obj_loader->registerNamespace('Gutterbling_');
return $obj_loader;
}
Класс, который не может быть найден, — Gutterbling_Acl . В нем не говорится, что файл не может быть найден, только класс.
Комментарии:
1. У вас есть полное сообщение об ошибке? Извините, но я видел, как слишком много людей делают неправильные предположения / выводы при интерпретации сообщений об ошибках. Я бы предпочел увидеть это своими глазами, чем полагаться на «… сбой, говорящий, что он не может найти класс, и печатает содержимое файла php …»
2. ** Полный текст из файла Gutterbling/Acl.php ** Неустранимая ошибка: класс ‘Gutterbling_Acl’ не найден в /Library/WebServer/Documents/local.hacksnitch.com/app/application/modules/user/Bootstrap.php в строке 243
3. Если я закомментирую код, который использует этот класс Acl, произойдет сбой при попытке загрузить что-то еще и распечатать весь этот файл, за которым последует аналогичная ошибка.
4. Автозагрузчик отлично работает на другом сайте на внешнем сервере. Я не видел этой проблемы, пока не начал работать локально.
Ответ №1:
Предупреждение: грязный быстрый ответ.
Заглянув в одно из моих приложений Zend, я увидел эту строку непосредственно перед оператором return (и у меня нет вызова setFallbackAutoloader) :
$obj_loader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH));
Добавьте его и протестируйте.
Комментарии:
1. Та же ошибка. Если я пытаюсь зарегистрировать пространство имен, я получаю сообщение об ошибке, которое не поддерживается этим классом. Итак, я начинаю думать, что мое пространство имен не регистрируется в первую очередь.
2. На самом деле просто сбросил мой автозагрузчик с помощью описанного выше метода. Похоже, пространство имен там есть.
Ответ №2:
ОК… Извините, что отнимаю у всех время. Проблема заключалась в том, что на удаленном сервере были включены короткие теги php. Локальный сервер этого не делает. Файлы, которые не работают, начинаются с
Еще раз, извините за это. Надеюсь, это поможет кому-то с той же проблемой.
Комментарии:
1. Вы можете удалить свой вопрос, если он не имеет значения, тогда