ошибка загрузки класса после добавления приложения / сервисов на сайт Zend Framework - PullRequest
0 голосов
/ 11 октября 2011

Я пытаюсь добавить новую папку в папку приложения в Zend Framework, но ни один из классов, которые я создаю в новой папке, не найден.

Что у меня есть эта структура:

application/
  models/
  modules/
  services/
    Test.php

Я пытался вызвать класс Test.php:

class Service_Test{

}

$test = new Service_Test()

Это приводит к ошибке: Предупреждение PHP: include_once (): не удалось открыть 'Service / Test.php' для включения (include_path = '...') в библиотеку / Zend / Loader.php в строке 146.

(include_path содержит список каталогов, которые я удалил для конфиденциальности).

Я думал, что службы будут автоматически найдены так же, как и модели автоматически. Кто-нибудь знает, как я могу заставить Zend Framework находить папку Services?


Я тоже это попробовал:

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'  => ROOT_PATH . '/application',
        'namespace' => 'Service',
    ));

Неустранимая ошибка PHP: класс 'Service_Test' не найден

Ответы [ 2 ]

0 голосов
/ 13 октября 2011

Спасибо всем за вашу помощь.Я наконец понял, что происходит.Сайт, над которым я работаю, имеет нетипичные настройки.Он не расширяет класс начальной загрузки Zend Framework и не вызывает Zend_Application.Классы были автоматически загружены с помощью:

set_include_path(ROOT_PATH . '/application/models'.PATH_SEPARATOR .
             ROOT_PATH . '/library'.PATH_SEPARATOR .
         get_include_path());

require_once('Zend/Loader.php');
@Zend_Loader::registerAutoload();

Я изменил его на:

set_include_path(ROOT_PATH . '/application/models'.PATH_SEPARATOR .
             ROOT_PATH . '/library'.PATH_SEPARATOR .
         get_include_path());

require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);
$resources = new Zend_Loader_Autoloader_Resource(array(
          'namespace' => '',
          'basePath'  => ROOT_PATH . '/application/',
      ));
$resources->addResourceTypes(array(
          'service' => array(
              'path'      => 'services',
              'namespace' => 'Service',
          )));

Технически, мне не нужно было добавлять ресурс, но если я не сделали просто положил / application / services в путь включения, тогда я не смог бы поставить префикс моим классам с помощью 'Service_'.

Я не уверен, что рекомендовал бы эту настройку (без расширения класса Bootstrap или использования Zend_Application) для всех остальных.Было бы интересно узнать, что другие люди думают об этой практике.Хорошо или плохо?В любом случае, так я решил проблему.

0 голосов
/ 12 октября 2011

В твоей начальной загрузке

protected function _initNamespace(){
  Zend_Loader_Autoloader::getInstance()->registerNamespace('Service_');

} Затем вы вызываете call любой класс, который начинается с 'Service _'

...