Помощник по чтению с Zend_View_Helper_ * и автозагрузка - PullRequest
1 голос
/ 02 февраля 2010

Я установил автозагрузчик для использования Fallback Autoloader следующим образом:

$autoloader=Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);

Если я посмотрю на ошибки php, для каждого вызова Zend_View_Helper генерируется уведомление, когда он пытается прочитать помощника, например: /var/www/arc/views/helpers/. Вот образец уведомления:

    fopen(/var/www/arc/views/helpers/Layout.php) [<a href='function.fopen'>function.fopen</a>]:
 failed to open stream: No such file or directory in file /private/var/www/arc/ZendFramework-
1.9.5/library/Zend/Loader.php at line: 165

Кажется, проблема здесь:

["_prefixToPaths:protected"] => array(1) {
  ["Zend_View_Helper_"] => array(2) {
    [0] => string(17) "Zend/View/Helper/"
    [1] => string(34) "/var/www/arc/views/helpers/"
  }

Вызывает ли это использование FallbackAutoloader? Казалось бы, потенциальная проблема производительности. Кроме того, он должен правильно разрешить пространство имен Zend_View_Helper_? Что мне здесь не хватает?

Обновление: нет, Zend/View/Helper/Layout.php есть.

Может быть, я упускаю суть того, что должен делать Zend_Loader_Autoloader (я думаю, что документы в этом случае несколько слабые).

Например, если я настрою свой файл application.ini следующим образом:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
includePaths.models= APPLICATION_PATH "/models"
includePaths.helper= APPLICATION_PATH "/controllers/helpers"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

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

Если я добавлю следующее в функцию Bootstrap _init

 $autoloader=Zend_Loader_Autoloader::getInstance();
 $autoloader->setFallbackAutoloader(true);

Хорошо загружается. Для первой ситуации мне нужно установить пространство имен?

к первому комментарию: Вот текущие значения с выходом:

Zend_Debug::dump($loader->isFallbackAutoloader(),'is fallback autoloader');
is fallback autoloader bool(false)

Zend_Debug::dump($loader->getDefaultAutoloader(),'default autoloader');
default autoloader array(2) {
  [0] => &string(11) "Zend_Loader"
  [1] => string(9) "loadClass"
}

Zend_Debug::dump($loader->getAutoloaders(),'autoloaders');
autoloaders array(0) {
}

Ответы [ 2 ]

0 голосов
/ 03 февраля 2010

Есть ли у вас другие автозагрузчики? Если нет, вам не нужно устанавливать setFallbackAutoloader (true).

Определенно происходит что-то необычное. Zend / View / Helper / Layout.php был как-то удален?

0 голосов
/ 02 февраля 2010

о чем говорится в уведомлении?Я предполагаю, что он пытается автоматически загрузить помощников из этой папки, и он не находит ожидаемые им классы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...